2

こんにちは、関数内の 2 つのスレッドで threadPool を使用しています。

この関数は、同期された方法で複数のクライアントによって呼び出されます。

私が使用しているその機能で

ExecutorService executor = Executors.newFixedThreadPool(2);

タスクを終了した後、エグゼキュータをシャットダウンしています。

executor.shutdown();

しかし、ログには次のような行があります

[pool-120069-thread-1]

それは 120069 個のプールが生きているということですか、それともプールに番号を付ける方法にすぎませんか。シャットダウンした後でも、番号付けを続行しますか?

4

1 に答える 1

4

それは120069プールが生きていることを意味しますか、それともプールに番号を付けるその方法です。

心配しないでください、それは後者です。システムで作成されたすべての新しいプールは新しいシーケンス番号を取得します。これは、プールを作成したことを意味しますが120069、おそらく以前の120068プールのほとんどはすでにシャットダウンされています。

一方、メソッド呼び出しごとにスレッドプールを作成し、プールを1つだけにして、それを複数の同時メソッド呼び出しで再利用することはお勧めできません。また、おそらく同期は必要ありません。しかし、それは実際のユースケースによって異なります。

awaitTermination()最後に、おそらくシャットダウン後に呼び出したいと思うでしょう。プールへの「ドアshutdown()を閉める」だけですが、実行中のタスクは引き続き実行されます。

于 2012-10-24T19:04:43.813 に答える