ScheduledThreadPoolExecutor не сразу выбирает задачи, когда предыдущая задача превышает периодJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 ScheduledThreadPoolExecutor не сразу выбирает задачи, когда предыдущая задача превышает период

Сообщение Anonymous »

Я использую ScheduledThreadPoolExecutor в Java для периодического выполнения задач с помощью ScheduleAtFixedRate(). Однако я заметил, что когда выполнение задачи занимает больше времени, чем указанный период, последующая задача не сразу подхватывается другим потоком.

Код: Выделить всё

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);

ScheduledFuture scheduledFuture = executor.scheduleAtFixedRate(() -> {
System.out.println("Executing every 3 seconds with: " + Thread.currentThread().getName());
try {
Thread.sleep(4000);
} catch (Exception ex) {}
System.out.println("Executed with: " + Thread.currentThread().getName());
}, 1, 3, TimeUnit.SECONDS);
Выход:

Код: Выделить всё

Executing every 3 seconds with: pool-1-thread-1
Executed with: pool-1-thread-1
Executing every 3 seconds with: pool-1-thread-1
Executed with: pool-1-thread-1
Executing every 3 seconds with: pool-1-thread-2
Executed with: pool-1-thread-2
В этом коде я планирую выполнение задачи каждые 3 секунды с начальной задержкой в ​​1 секунду. Однако если выполнение задачи занимает более 3 секунд (потока 1), последующая задача не сразу подхватывается другим потоком (потоком 2). Вместо этого создается впечатление, что он ждет завершения текущей задачи, что приводит к задержке выполнения последующих задач.
Это ожидаемое поведение ScheduledThreadPoolExecutor? Если да, то есть ли способ гарантировать, что задачи будут немедленно подхвачены доступными потоками, даже если предыдущая задача превышает указанный период?
Будем очень признательны за любые идеи и предложения. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/784 ... vious-task
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»