1

新しいファイル、変更されたファイル、または削除されたファイルのファイルパスをリッスンするスレッドを作成する必要があります。Spring 3、Struts 2、Hibernate 3を使用するWebアプリケーションを使用しています。プロジェクトを実行すると、「HelloWorld」というテキストを含むindex.jspが読み込まれます。

問題は、ファイルパスをリッスンするJavaを作成し、Thread()それをindex.jspに割り当てる場合です。

<action name="" method="runThread" class="TestThreadBean">
     <result>index.jsp</result>
</action>

次に、スレッドが停止しないため、「HelloWorld」テキストは表示されません(どちらが正しいか、停止することは想定されていません)。このスレッドをバックグラウンドで実行し、他のWebアプリケーションに干渉しないようにする必要があります。ただし、このスレッド専用に別のWebアプリケーションを作成したくありません。また、 Sessionインスタンスが作成newされるたびにThreadインスタンスが作成されることは望ましくありませんnew。アクティブなセッションインスタンスの数に関係なく、Threadインスタンスは1つだけである必要があります。

4

1 に答える 1

7

基本的に、Webアプリケーションやエンタープライズ(EJB)アプリケーションなどのコンテナー管理アプリケーションで独自のスレッドを開始しないことをお勧めします。

これは、コンテナ環境では、スレッドを含むすべてのリソースをコンテナで管理する必要があるためです。しかし、IMHOは、このスレッドをトランザクションでラップするなど、私たち自身のスレッドとそのリソースの影響とライフサイクルを知っていれば、標準的な方法(new Thread())を使用してスレッドを作成できますが、それは私の意見です。

決定を下す前に、「コンテナ管理スレッド」を1回確認することをお勧めします。commonJを一度参照してコンテナのスレッドプールへのハンドルを取得できますが、これは標準ではないか、コンテナの仕様に記載されていないため、すべてのコンテナで機能するとは限りません。これは次の場合に機能します。

于 2012-07-18T12:12:12.083 に答える