java `SingleThreadExecutor` гарантирует, что предыдущая работа завершена до начала новой? - PullRequest
0 голосов
/ 23 марта 2020

Это фрагмент моего кода:

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 уже сделано?

1 Ответ

2 голосов
/ 23 марта 2020

С SingleThreadExecutor :

Задания гарантированно выполняются последовательно, и в любой момент времени не будет активным более одной задачи.

Так что в вашем случае work 2 придется подождать, пока не закончится work 1.

...