Это фрагмент моего кода:
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
}
});
Что я кроме этого кода должен сделать, это запустить work 1
, затем, пока выполняется work 1
, сделать запрос к api и после api вызов завершается, сохраняя свои результаты в work 2
.
Проблема здесь в том, что work 2
должен быть выполнен после выполнения work 1
. Если work 2
запустится до завершения work 1
, это может привести к неправильной работе моего приложения.
Обычно вызов API занимает намного больше времени, чем work 1
, но давайте предположим, что вызов API завершен. и work 1
все еще работает. Поскольку diskIO равен SingleThreadExecutor
, означает ли это, что, поскольку он является однопоточным, в этом случае work 2
придется подождать, пока не закончится work 1
?
А если ответ отрицательный, как убедиться, что при work 2
начинается, work 1
уже сделано?