Все AsyncTask параллельны, но AsyncTask с тем же именем класса выполняется по последовательному - PullRequest
0 голосов
/ 30 декабря 2018

Мне нужен ваш совет по поводу последовательного / параллельного AsyncTask.

Цель:
asyncA1 и asyncA2 с тем же именем класса AsyncA запустить серийный номер.
asyncA1 / asyncA2 и asyncB1 выполнить параллельно (другое имя класса).

Запуск AsyncTasks:

AsyncA asyncA1 = new AsyncA(1);
asyncA1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

AsyncA asyncA2 = new AsyncA(2);
asyncA2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

AsyncB asyncB1 = new AsyncB(1);
asyncB1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

Пример AsyncA, AsyncB такой же, но с другим именем класса:

private static class AsyncA extends AsyncTask<Void, Void, Void> {

    int number;
    private static final AtomicInteger cntr = new AtomicInteger(0);

    AsyncA(int n){
        number = n;
    }

    @Override
    protected Void doInBackground(Void... voids) {
        Log.i(TAG, "!!!Task:"+number+": Enter to doInBackground(). Thread:"+Thread.currentThread().getName());
        //Waiting for finish previous task
        while(cntr.get() != 0){
        try {
            Log.i(TAG, "!!!Task:"+number+": Previous task is not completed => go to sleep");
            Thread.sleep(1000);
        } catch (InterruptedException ignore) {}
        }

        cntr.incrementAndGet();

        //Any work..
        try {
        Log.i(TAG, "!!!Task:"+number+": Work in doInBackground()");
        Thread.sleep(5000);
        } catch (InterruptedException ignore) {}

        cntr.decrementAndGet();
        return null;
    }

    @Override
    protected void onPostExecute(Void v) {
        Log.i(TAG, "!!!Task:"+number+" completed. Thread:"+Thread.currentThread().getName());
    }
}

Я могу сделать это через cntr AtomicInteger переменная и Thread.sleep, но я думаю, что это не хорошее решение.Какие-либо предложения?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...