Использовать одновременный сбор в программе EJB - PullRequest
1 голос
/ 20 января 2011

Могу ли я использовать одновременный сбор (java.util.concurrent) в программе EJB?Потому что в управляемой среде много ограничений.Возможно, EJB-контейнер управляет всеми потоками, поэтому java.util.concurrent нарушит среду EJB.

Правильно ли я понимаю?Если это так, операции, связанные с потоками, такие как sleep(), synchronized, также не могут использоваться в программе EJB.

Например, BlockingQueue вызывает приостановку потока в сессионном компоненте EJB.

1 Ответ

4 голосов
/ 20 января 2011

Это зависит от обстоятельств, но в целом нет ничего, почему вы не могли бы использовать параллельные коллекции в программе EJB.

Контейнер EJB управляет (среди прочих) потоками запросов, то есть он принимаетзабота о выделении каждого входящего запроса в отдельный поток (взятый из пула потоков).Тем не менее, параллельные коллекции никоим образом не мешают этому: они не создают и не управляют потоками внутри, просто гарантируют, что данные, хранящиеся в них, могут безопасно получать доступ и изменяться несколькими потоками параллельно.

Примечаниечто вам нужно использовать одновременные коллекции только тогда, когда их содержимое доступно / изменено из нескольких потоков.Если ваши данные ограничены одним потоком (запросом), вам, скорее всего, не нужно беспокоиться о безопасности потока.

О sleep() и synchronized вы должны понимать, что они находятся на другом(более низкий) уровень абстракции, чем одновременные коллекции.Вам не нужно использовать какие-либо из них непосредственно при использовании одновременных коллекций.(Некоторые - но не все - коллекции используют синхронизированные блоки для своей реализации. Около sleep(), я уверен, что он, вероятно, не используется ни в какой параллельной коллекции).

Без более конкретной информации о том, что вы бынравится достигать, трудно сказать больше.

...