2011-07-10 8 views
3

私は理論的な質問をしています。Tomcatで新しいスレッドを開く

サーブレットのdoGet/doPostメソッドやSpring MVCコントローラ内で実行される操作に時間がかかるという問題があります。新しいバックグラウンドスレッドを開くのは良いアイデアですか? パフォーマンスに問題はありませんか?

この場合、jBoss JMSシステムを使用していたのですか?

答えて

3

これは問題ありません(TomcatはJavaEEコンテナではありません)。 Spring MVCに言及してから、実行するメソッドに@Asyncを使用することをお勧めします。新しいスレッドはSpringで生成されます(同等のJavaEEアノテーションと非常に似ています)。

1

まあ、TomcatはJava EEコンテナではなく、サーブレットコンテナだけなので、問題なく新しいスレッドを開くことができます(対処すべきマルチスレッドの根本的な問題は別として)。

JMSは、メッセージを処理する完全な吹き出しのミドルウェア(まったく新しい実行時)を切り離すソリューションです。このアプローチは、効率の理由から単一のプロセスをデカップリングしたい場合には、複雑すぎる可能性があります。

Spring 3.0を使用している場合は、asynchronous callsを使用することをおすすめします。 @AsyncでBeanのメソッドに注釈を付けるだけで、完了しました。

2

サーブレット3.0では、それはここで助けになるだろう。

基本的には、非同期処理をサポートするようにサーブレットをマークしてから、コンテキストを使用して新しいスレッドを開始します。コンテナはスレッドを自分で処理する必要はありません。

this blog article for an ideaを参照してください。これを行うメリットは、サーブレットが完全なJava EEコンテナに移植可能であり、独自のスレッドを開始できないことです。

それ以外の場合は、ExecutionServiceとjava.util.concurrentのフレンドを使用することを検討してください。最近あなた自身が新しいスレッド()を使う本当の理由はありません。

関連する問題