私は理論的な質問をしています。Tomcatで新しいスレッドを開く
サーブレットのdoGet/doPostメソッドやSpring MVCコントローラ内で実行される操作に時間がかかるという問題があります。新しいバックグラウンドスレッドを開くのは良いアイデアですか? パフォーマンスに問題はありませんか?
この場合、jBoss JMSシステムを使用していたのですか?
私は理論的な質問をしています。Tomcatで新しいスレッドを開く
サーブレットのdoGet/doPostメソッドやSpring MVCコントローラ内で実行される操作に時間がかかるという問題があります。新しいバックグラウンドスレッドを開くのは良いアイデアですか? パフォーマンスに問題はありませんか?
この場合、jBoss JMSシステムを使用していたのですか?
これは問題ありません(TomcatはJavaEEコンテナではありません)。 Spring MVCに言及してから、実行するメソッドに@Async
を使用することをお勧めします。新しいスレッドはSpringで生成されます(同等のJavaEEアノテーションと非常に似ています)。
まあ、TomcatはJava EEコンテナではなく、サーブレットコンテナだけなので、問題なく新しいスレッドを開くことができます(対処すべきマルチスレッドの根本的な問題は別として)。
JMSは、メッセージを処理する完全な吹き出しのミドルウェア(まったく新しい実行時)を切り離すソリューションです。このアプローチは、効率の理由から単一のプロセスをデカップリングしたい場合には、複雑すぎる可能性があります。
Spring 3.0を使用している場合は、asynchronous callsを使用することをおすすめします。 @AsyncでBeanのメソッドに注釈を付けるだけで、完了しました。
サーブレット3.0では、それはここで助けになるだろう。
基本的には、非同期処理をサポートするようにサーブレットをマークしてから、コンテキストを使用して新しいスレッドを開始します。コンテナはスレッドを自分で処理する必要はありません。
this blog article for an ideaを参照してください。これを行うメリットは、サーブレットが完全なJava EEコンテナに移植可能であり、独自のスレッドを開始できないことです。
それ以外の場合は、ExecutionServiceとjava.util.concurrentのフレンドを使用することを検討してください。最近あなた自身が新しいスレッド()を使う本当の理由はありません。