Executors
обеспечивает newCachedThreadPool()
и newScheduledThreadPool()
, но нет newCachedScheduledThreadPool()
, что дает здесь? У меня есть приложение, которое получает пульсирующие сообщения и потребности запланировать довольно длинный шаг обработки после фиксированной задержки каждого. Ограничения времени не супер трудны, но я предпочел бы иметь больше потоков, созданных на лету, если я превышаю размер пула и затем имею их обрезанный назад в течение периодов неактивности. Есть ли что-то, что я пропустил в параллельной библиотеке, или я должен записать свое собственное?
По замыслу ScheduledThreadPoolExecutor имеет фиксированный размер. Вы можете использовать однопоточную версию, которая отправляется в обычный ExecutorService для выполнения задачи. Этот поток событий + рабочий пул довольно легко координировать, а гибкость компенсирует выделенный поток. Я использовал это в прошлом, чтобы заменить TimerTasks и другие некритические задачи, чтобы использовать общий исполнитель в качестве общесистемного пула.
java.util.concurrent.Executors
- это не более чем коллекция статических удобных методов, которые конструируют общие схемы исполнителей.
Если вам нужно что-то конкретное, чего нет в Executors
, то смело конструируйте свои собственные экземпляры классов реализации, используя примеры в Executors
в качестве руководства.
Как говорит Скаффман, Executors
- это всего лишь набор фабричных методов. если вам нужен конкретный экземпляр, вы всегда можете проверить все существующие реализаторы Executor
. В вашем случае я думаю, что было бы неплохо вызвать один из различных конструкторов ScheduledThreadPoolExecutor .