1

内で Java スレッド プールThreadPoolExecutor (コア プール サイズ) を開始していWeblogic server (WLS)ます。プールを正常にシャットダウンするには、このプールを呼び出す必要がありshutdown()ます。しかし、私の手に負えない理由により、この WLS に Application ライフサイクル リスナーを追加することができません。つまり、このメソッドを呼び出すためのシャットダウン フックがありません。したがって、プール内のスレッドをデーモンスレッドとして作成することを考えているため、WLS JVMシャットダウン時にこれらのスレッドが終了するのを待ちません。そうしないと、プール内のコアスレッドが常に実行されているため、JVM は正常にシャットダウンしません。

スレッドプールにスレッドをデーモンとして作成することの欠点はありますか? デーモン スレッドについて理解しています。JVM が終了すると、これらのスレッドは正常にクリーンアップされず、実行中のものは正常に終了しません。この問題は、シャットダウン段階でのみ発生します。

スレッドプールでスレッドデーモンを作成する際に他の問題はありますか? (またはより良い方法)

4

2 に答える 2

1

アプリケーション コンテナ内にいる場合、@mprabhat が示唆するようにワーク マネージャを使用することをお勧めします。ただし、制御下にあるスレッドが本当に必要な場合は、スレッドをシャットダウンできます。WebLogic は、シャットダウン フックを介してアプリケーション ライフ サイクル通知を実装します。そして、そのメカニズムは引き続き利用できます。Runtime.addShutdownHookを使用して登録できます。仕事を早く終わらせるということを忘れないでください。WebLogic にはタイムアウトがあるため、シャットダウン シーケンスは基本的に次のとおりです。

  1. シャットダウンが要求されました (System.exit() または JVM プロセスに送信されたシグナルによって)。
  2. シャットダウン フックと WebLogic のシャットダウン フックが実行されます。
  3. タイムアウト後 (5 ~ 10 秒だと思います)、WebLogic のシャットダウン フックの 1 つが System.halt() を呼び出します。
  4. JVM は、シャットダウン フックが完了したかどうかに関係なく終了します。
于 2012-06-07T11:41:06.800 に答える
1

以下のリンクを参照してください。Java 7スレッドを同時に使用することをお勧めします

http://www.baptiste-wicht.com/2010/09/java-concurrency-part-7-executors-and-thread-pools/

楽しい

于 2012-06-07T11:41:41.627 に答える