Итак, скажем, у меня есть ScheduledExecutorService
с 10 потоками, сгенерированными как таковые, и я запускаю периодическую задачу, которая запускается раз в минуту.
svc = Executors.newScheduledThreadPool(10);
svc.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.MINUTES);
Это идеальный способ заставить myRunnable
запускаться раз в минуту. Теперь предположим, что выполнение myRunnable
занимает больше минуты (поэтому продолжительность задачи теперь превышает период задачи). Текущее поведение, которое я заметил, заключается в том, что пул потоков будет ждать, пока myRunnable
не завершит выполнение, прежде чем снова запуститься. Похоже, что я говорю своим кодом, чтобы запланировать задачу, но занять только один поток в пуле с myRunnable
.
Есть ли вариант/другой вызов API/дополнительного метода, где я могу заставить этот пул потоков просто захватить следующий доступный поток и запустить его, если первый поток не завершил выполнение за одну минуту? (Или я делаю это неправильно?)
Executors.newScheduledThreadPool
и ничего не увидел, но я забыл проверить самscheduleAtFixedRate
JavaDoc. - person Michael Plautz   schedule 30.10.2014