Подтвердить что ты не робот

Почему нет запланированного кэшированного пула потоков, предоставляемого классом Java Executors?

Executors предоставляет newCachedThreadPool() и newScheduledThreadPool(), но не newCachedScheduledThreadPool(), что здесь дает? У меня есть приложение, которое получает всплывающие сообщения и требует запланировать довольно длительный шаг обработки после фиксированной задержки для каждого. Ограничения по времени не слишком жесткие, но я предпочел бы, чтобы на протяжении лета было создано больше потоков, если я превышу размер пула, а затем уберу их в периоды бездействия. Есть ли что-то, что я пропустил в параллельной библиотеке, или мне нужно написать свой собственный?

4b9b3361

Ответ 1

По конструкции ScheduledThreadPoolExecutor является фиксированным размером. Вы можете использовать однопоточную версию, которая отправляется в обычный ExecutorService для выполнения задачи. Этот поток событий + рабочий пул довольно легко согласовывается, и гибкость компенсирует выделенный поток. Я использовал это в прошлом, чтобы заменить TimerTasks и другие некритические задачи, чтобы использовать общий исполнитель как общесистемный пул.

Ответ 3

java.util.concurrent.Executors - это не что иное, как набор статических методов удобства, которые создают общие расположения исполнителей.

Если вы хотите что-то конкретное, которое не предлагается Executors, тогда не стесняйтесь создавать свой собственный экземпляр классов реализации, используя примеры в Executors в качестве руководства.

Ответ 4

Как скаффман говорит, Executors - это всего лишь набор методов factory. если вам нужен конкретный экземпляр, вы всегда можете проверить всех существующих разработчиков Executor. В вашем случае я думаю, что хорошая идея для вызова одного из различных конструкторов ScheduledThreadPoolExecutor.