2011-09-08 15 views
2

私はJavaの並行性には新しいので、これは何度も何度も何度か不足していると答えた質問かもしれません。Executors.newSingleThreadExecutor()の出口戦略は何ですか

私はそうのようなタスクとして実行しています:

Executors.newSingleThreadExecutor()を実行する(タスク)の出口をそれをしない理由タスクのrunメソッドを実行するの最後に来るとき

私の質問です。なぜスレッドはまだ生きていますか?私の理解は、スレッドが実行された後に終了しました()スレッドはもう終了し、存在しなくなりました。

答えて

5

newSingleThreadExecutorは、単一スレッドを使用していますExecutorService返します - それはまだ、複数のタスクを実行することができます。より多くのタスクを提供したいので、終了しません。

あなたは使用することができます。

ExecutorService service = Executors.newSingleThreadExecutor(); 
service.execute(task); 
service.shutdown(); 

をタスクが実行された後、それをシャットダウンします。

+0

ありがとうございました。 –

3

スレッドは、そのライフサイクルがエグゼキュータに割り当てられたタスクのライフサイクルに関連付けられていないため、有効です。あなたが内部的に、返されたExecutorServiceのがあなたの仕事の1つが潜在的に新しいスレッドをインスタンス化し、あなたがそれに割り当てたとして順次として多くのタスクを実行するための単一のスレッドを使用していることを見つける

javadoc for Executors.newSingleThreadExecutor

:見てみましょう元のものを殺す。

+0

私はタスクがスレッドライフサイクルから分離しているのを見ます。ありがとう、javadocを読む –

関連する問題