Почему не там никакой запланированный кэшируемый пул потоков, обеспеченный классом Исполнителей Java?

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

36
задан skaffman 19 July 2010 в 13:10
поделиться

3 ответа

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

8
ответ дан 27 November 2019 в 06:18
поделиться

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

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

3
ответ дан 27 November 2019 в 06:18
поделиться

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

-2
ответ дан 27 November 2019 в 06:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: