Использование ConcurrentLinkedQueue с многопоточностью - PullRequest
0 голосов
/ 28 февраля 2011

В рамках моего проекта мне нужно создать пул потоков, содержащий фиксированное число потоков. Когда потоки выделяются разным процессам, мне нужно выделить столько сессий вместе с потоками. Я хочу использовать ConcurrentLinkedQueue (фиксированного размера) для хранения сессий, чтобы, как и когда потоки были завершены, я мог вернуть свои сеансы в очередь, сделав их доступными для других процессов. Надеюсь, мое требование прояснено ... Может кто-нибудь дать мне некоторые рекомендации о том, как это может быть реализовано ..? Как может использоваться ConcurrentLinkedQueue ..?

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Полагаю, вы хотите сделать то же самое, что и

Executors.newFixedThreadPool(n);

Непонятно, почему вы не используете этот пул потоков.

Похоже, вы также хотите использовать очередь в качестве пула объектов. Вы можете использовать add() to и poll(), чтобы узнать, доступен ли свободный элемент.

0 голосов
/ 28 февраля 2011

когда потоки выделяются разным процессам ...

Вы не сможете совместно использовать ресурсы между потоками в различных процессах с помощью ConcurrentLinkedQueue. Он будет доступен только из потоков одного процесса.

Если это не проблема, вы можете использовать пул потоков :

Executors.newFixedThreadPool(int nThreads, ThreadFactory threadFactory) 

A ThreadFactory может связать ресурс Session с потоками, управляемыми пулом потоков, используя ThreadLocal . Вы можете настроить различные стратегии инициализации. Не забудьте очистить сессии, когда пул потоков завершает работу.

...