11
Июн
2021

Как параллельно выполнять задания на Java/Kotlin в порядке очереди?

Суть такая. Есть задача scheduleAtFixedRate который получает некий список файлов, необходимых для загрузки, помещаются они в список ArrayList<countersFeedsItems>

private void startDemons(){
    Timer timer = new Timer(true);
    System.out.println("TimerTask начал выполнение");
    timer.scheduleAtFixedRate(new MyTimerTask() {
        @Override
        public void run() {
            countersFeedsItems = new ViewModel().getCountersFeed();
            System.out.println("запрошен список getCountersFeed()");
                          //дальнейшая необходимая реализация
        }
    }, 10 * 1000, 360*10 * 1000); //10 секунд (10 * 1000 миллисекунд)
    //задание task планируется к выполнению через период в миллисекундах, переданный в параметре delay.
    //Затем задание повторяется повторно периодически - каждые period миллисекунд
}

В списке может быть, к примеру 70 значений-ссылок на файлы.
На ум приходит только Queue? Но из этого списка обрабатывать нужно пачками, не более 10 штук (одновременно).

И далее, тоже проблема. Скорее всего, Очередь нужно положить в некий цикл(?), который будет "ждать" момента, когда в очередь будет < 10.
При этом, все 10 заданий обрабатываются параллельно (у меня через Kotlin-корутины).

Соответственно, для начала как-то пометить задачу, что она находится в процессе (чтобы не начать ее повторное выполнение). Если задача завершилась с ошибкой (файл не скачался/недоступен), то вернуть эту задачу опять в очередь.
Если файл скачался, удалить его из очереди. В тот момент, когда задача из очереди удалена, в очередь добавляется новая ссылка на файл.

Кто-нибудь может помочь, как сделать тот самый некий "цикл" который будет следить за количеством и "ожиданием"? Хотя бы какие методы для этого возможны?

Источник: https://ru.stackoverflow.com/questions/1294317/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE-%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%82%D1%8C-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BD%D0%B0-java-kotlin-%D0%B2-%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5-%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D0%B8

Тебе может это понравится...

Добавить комментарий