2016-04-19 5 views
0

現在、私はExecutorServiceクラスとnewFixedThreadPoolコマンドをJavaで使用してスレッドを作成しています。 ExecuterServiceインスタンスを宣言した後にshutdown()コマンドを実行するのを忘れた場合、プログラムは一度もオフになりませんでした。 ExecuterServiceは、明示的なshutdown()コマンドを持たないExecutorインターフェイスを実装しているため、内部コマンドがスレッドをシャットダウンしている可能性があると推測しました。 ExecutorServiceクラスの中で何が起きているのか、そしてスレッドが死んでいるなど、関連するスレッドが何か起こっているのかと疑問に思っています。shutdown()のコマンドは忘れてしまいます。 ありがとうございます。JavaでExecutorServiceを宣言した後にシャットダウン句が見つからない場合どうなるでしょうか

答えて

1

Executors.newFixedThreadPoolは、スレッドプールでshutdown()メソッドが呼び出されるまで決してシャットダウンされない、指定された数の「コア」スレッドを持つスレッドプールを作成します。 finalize method of ThreadPoolExecutor

ルック(具象クラスがExecutors.newFixedThreadPoolへの呼び出しによって返された):だから

protected void finalize() { 
    shutdown(); 
} 

ExecutorServiceインスタンスがガベージコレクションの対象となった場合finalize()が呼び出されたときに、それがシャットダウンされます。

ただし、finalize()メソッドに関連するすべてのものと同様に、特定の時刻(まったく)に呼び出されることに頼るべきではありません。

+0

追加する価値があります。それは 'poll()'を基本キューに入れます。 – Palcente

+0

ありがとうアンディ!とても役立つ – tlwmalfp

0

newFixedThreadPool
プール内のスレッドは、明示的にシャットダウンするまで存在します。
シャットダウン()を明示的に呼び出さない限り、エグゼキュータサービスオブジェクトがガベージコレクションの対象になる可能性はほとんどありません。スレッドにはまだエグゼキュータの参照があります。
JVMはデフォルトで、メインスレッドプールにのみ属するすべてのスレッドをシャットダウンします。

関連する問題