ScheduledExecutorService - несколько потоков параллельно

Меня интересует использование ScheduledExecutorService для создания нескольких потоков для задач, если предыдущая задача еще не была завершена. Например, мне нужно обрабатывать файл каждые 0,5 секунды. Первая задача начинает обработку файла, через 0,5 секунды, если первый поток не завершен, создается второй поток и начинает обработку второго файла и так далее. Это можно сделать примерно так:

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(4)
    while (!executor.isShutdown()) {  
        executor.execute(task);
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            // handle
        }
    }

Теперь мой вопрос: почему я не могу сделать это с помощью executor.scheduleAtFixedRate ?

Я получаю следующее: первая задача занимает больше времени, вторая задача запускается сразу после завершения первой, но новый поток не запускается, даже если у исполнителя есть пул потоков. executeor.scheduleWithFixedDelay ясен - он выполняет задачи с одинаковым промежутком времени между ними, и не имеет значения, сколько времени требуется для выполнения задачи. Так что, вероятно, я неправильно понял назначение ScheduledExecutorService .

Может, мне стоит поискать другого исполнителя? Или просто используйте код, который я разместил здесь? Есть мысли?

8
задан Drew 11 November 2015 в 20:22
поделиться