Я хочу создать пул потоков фиксированного размера, который не вносит никакой задачи в свою очередь. Другими словами, если пул потоков в настоящее время используется, входящая задача должна быть отклонена напрямую. Основываясь на documentation, одним из способов сделать это, на мой взгляд, было бы создание объекта Dummy Queue, который отказывается признать задачу. Каков идиоматический способ сделать это на Java?ThreadPoolExecutor без очереди
ответ
Вы можете использовать SynchronousQueue в своем ThreadPoolExector, который представляет собой очередь, которая не содержит объектов. Пул кэшированных потоков использует это, потому что он создает новые потоки по требованию.
Если он не может быть поставлен в очередь, но я бы предложил использовать RejectedExecutionHandler для выполнения задачи в текущем потоке. Таким образом, он всегда будет запускаться «немедленно».
BTW: Было бы полезно дать понять, почему вы хотите это сделать.
Можете ли вы уточнить, почему вы хотите сделать такое? Основная цель TP + Q состоит в том, чтобы иметь автоматический «механизм удержания» для работы и отделить рабочих от процесса создания работы. Если ваше намерение состоит в том, чтобы иметь только столько приемлемых рабочих пакетов, сколько работникам, тогда вам действительно не нужен TPE.
- 1. Изменить размер очереди ThreadPoolExecutor
- 2. Очистка план очереди в ограниченной ThreadPoolExecutor
- 3. Удаление всех задач в очереди ThreadPoolExecutor
- 4. Это правильно? ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool (numThreads);
- 5. Политика ThreadPoolExecutor
- 6. Customized ThreadPoolExecutor
- 7. ThreadPoolExecutor проверяет, находится ли определенная задача в очереди
- 8. Android - как проверить, достиг ли ThreadPoolExecutor предел очереди?
- 9. ThreadPoolExecutor - ArrayBlockingQueue ... ждать, прежде чем она удаляет элемент формирования очереди
- 10. ThreadPoolExecutor with ConcurrentLinkedQueue
- 11. пользовательское ThreadPoolExecutor с задержками
- 12. Work/Task Stealing ThreadPoolExecutor
- 13. Deadlocking/w ThreadPoolExecutor
- 14. ActiveMQ и ThreadPoolExecutor, работающие вместе
- 15. ThreadPoolExecutor поведение в очереди, настраиваемое для предпочтения создания новых потоков в очереди.
- 16. java ThreadPoolExecutor default
- 17. с указанием проблемы ThreadPoolExecutor
- 18. ThreadPoolExecutor - использовать потоки перед очередью
- 19. Блок ThreadPoolExecutor, когда очередь заполнена?
- 20. Нет задачи в ThreadPoolExecutor, умирает ли ThreadPoolexecutor?
- 21. Приложение ThreadPoolExecutor не завершает
- 22. Конфигурация ThreadPoolExecutor
- 23. ThreadPoolExecutor internals
- 24. ThreadPoolExecutor висит
- 25. Тупик в ThreadPoolExecutor
- 26. ThreadPoolExecutor для различной задачи
- 27. NServiceBus без входной очереди
- 28. jQuery анимация без очереди
- 29. ThreadPoolExecutor:: TaskRejectedException from Executor
- 30. Синхронный производитель задачи/потребитель, используя ThreadPoolExecutor
Задача может быть выбрана другим исполнителем пула потоков с бесплатными потоками, а не ожиданием очереди в первом. Что я должен использовать вместо ThreadPoolExecutor? –
Если вы хотите контролировать выполнение, TPE не является вашим выбором. Вам лучше иметь простую коллекцию рабочих потоков, с помощью которой вы можете передать задание (если они доступны) простой набор, который вы создаете и вытаскиваете/выталкиваете из них в основной поток. –
vivekv