Насколько я знаю, пулы потоков (java.util.concurrent.Executor class) предоставляют очередь задач для всех потоков в пуле. Поэтому я действительно не знаю, какой поток выполнит мою задачу. Но мне нужно иметь очереди задач, назначенных каждому потоку. Как мне это сделать?Очереди для каждого потока в пуле потоков
ответ
Если вы хотите, чтобы определенные потоки выполняли определенные задачи, вам не подходит стандартный пул Threadpool. Но вы можете использовать несколько Threadpool с одним потоком в каждом, чтобы решить вашу проблему.
Вы должны написать свою программу, чтобы вам не нужно было знать, какой поток выполняет задачу. Это просто анонимные рабочие потоки.
Однако, если вы действительно хотите знать, вы можете создать однопоточную ExecutorService для каждого потока, который вы хотите, а затем вы узнаете, какой поток выполнит задачу.
Вы правы, но в моей программе все входные данные разделены между работниками в специальном порядке, поэтому, когда я получаю новый ввод, я решаю, какой из них будет выполняться, и затем я помещаю этот ввод в его поток. Я вижу, что это действительно не очень хорошая идея. Я постараюсь избежать этой ловушки. Спасибо за Ваш ответ. – notnavol
@notnavol Я был бы осторожен в том, чтобы разбивать вход таким образом. Если вы отрезаете слишком мелко, вы можете получить решение, в котором накладные расходы составляют 10 раз (или даже намного больше). Это может сделать многопоточные решения намного медленнее, чем однопоточное решение. –
- 1. Создание фактического потока в пуле потоков
- 2. pthread exit из потока в пуле потоков
- 3. Как предотвратить System.Timers.Timer от очереди для выполнения в пуле потоков?
- 4. Доступность потоков в пуле потоков?
- 5. Общее - Количество потоков в пуле потоков
- 6. Настройка минимальных потоков в пуле потоков
- 7. Определить положение задач в очереди в пуле потоков
- 8. Состояние нити в пуле потоков
- 9. С ThreadPoolExecutor, как получить имя потока, запущенного в пуле потоков?
- 10. C++ Порядок выполнения потоков в пуле потоков
- 11. Ошибка сегментации в пуле потоков
- 12. Как приостановить выполнение потока в пуле потоков в течение определенного промежутка времени без полной блокировки потока?
- 13. Как получить имя потока в пуле фиксированных потоков
- 14. Прерывание блокировкиQueue take() в пуле потоков
- 15. Ограничить количество параллельных потоков в пуле потоков
- 16. Масштабируемость с помощью экономии потоков: асинхронные операции и многопотоковые очереди производителей/потребителей в пуле потоков?
- 17. запустить метод в пуле потоков
- 18. Несколько потоков, одно чтение потока из очереди, безопасность потоков
- 19. Использование методов в пуле потоков
- 20. Максимальное количество потоков в пуле
- 21. Алгоритм распределения рабочей нагрузки в пуле потоков
- 22. Количество потоков, созданных в пуле потоков при использовании Executors.newCachedThreadPool()
- 23. Построение управляемой очереди потоков java
- 24. Завершить длительный поток потока в пуле потоков, который был создан с помощью QueueUserWorkItem (win 32/nt5)
- 25. Как предотвратить выполнение BeginGetResponse в пуле потоков
- 26. Обработка потока для каждого пользователя
- 27. Действия в очереди для простого класса потоков?
- 28. Приоритет нижней нити C# в пуле потоков
- 29. Код OpenMP, выполняемый в пуле потоков
- 30. Защита потоков для очереди STL
Почему вы заботитесь о том, какой поток выполняет одну конкретную задачу до тех пор, пока в конечном итоге это будет сделано? – fge