Esto se fragmento de mi código:
AppExecutors.getInstance().diskIO().execute(new Runnable() {
@Override
public void run() {
// work 1
}
});
JSONArray apiResponseGet = ApiHelper.getInstance().getData();
if(apiResponseGet == null)
throw new Exception("Api call failed");
AppExecutors.getInstance().diskIO().execute(new Runnable() {
@Override
public void run() {
// work 2
}
});
Excepto lo que este código para hacer es poner en marcha work 1
, a continuación, mientras work 1
se está ejecutando, solicitud de cosméticos a la API, y una vez finalizada la llamada a la API de guardarlo como resultado work 2
.
El problema aquí es que work 2
tiene que ser ejecutado después de work 1
que se hace. Si work 2
se iniciaría antes de work 1
que se termine, esto podría causar mi aplicación a portarse mal.
Por lo general llaman a la API tomará mucho más tiempo que work 1
, pero vamos a suponer por ahora que la llamada a la API ha terminado, y work 1
todavía está en funcionamiento. Desde diskIO es SingleThreadExecutor
, ¿significa que ya que es un solo hilo, en este caso, work 2
tendrá que esperar hasta work 1
acabados?
Y si respuesta es no, ¿cómo asegurarse de que cuando work 2
se inicia, work 1
ya está hecho?
De SingleThreadExecutor :
Las tareas están garantizados para ejecutar secuencialmente, y no hay más de una tarea estarán activos en un momento dado.
Así, en su caso work 2
tendrá que esperar hasta work 1
acabados.