2011-01-20 9 views
1

EJBプログラムで同時収集(java.util.concurrent)を使用できますか?管理環境には多くの制約があるためです。おそらくEJBコンテナはすべてのスレッド制御を管理するため、java.util.concurrentはEJB環境に違反します。EJBプログラムで同時収集を使用

私は正しく理解していますか?その場合、sleep(),​​などのスレッド関連の操作は、EJBプログラムでも使用できません。

たとえば、BlockingQueueは、EJBセッションBeanでスレッドを中断させます。

答えて

4

状況によって異なりますが、一般に、EJBプログラムで並行コレクションを使用できなかった理由は何もありません。

EJBコンテナは(他の中でも)要求スレッドを管理します。つまり、着信要求を別のスレッド(スレッドプールから取得)に割り当てます。しかし、並列コレクションはこれを妨げません。スレッドを内部的に作成したり操作したりすることはありません。その内部に格納されたデータに複数のスレッドが安全にアクセスして変更できるようにするだけです。

コンテンツが複数のスレッドからアクセスまたは変更されている場合にのみ、コンカレントコレクションを使用する必要があることに注意してください。データが単一のスレッド(要求)に限定されている場合は、おそらくスレッドの安全性を気にする必要はありません。

sleep()および​​これらは、並行コレクションとは異なる(低い)抽象レベルにあることを理解する必要があります。並行収集を使用する場合は、これらを直接使用する必要はありません。 (一部ではありますが、コレクションのうちの一部ではなく、内部で同期化されたブロックが使用されます)。sleep()については、おそらく同時収集では使用されていません。

あなたが達成したいと思うものについての具体的な詳細がなければ、それ以上は分かりません。

関連する問題