2012-08-22 15 views
5

javadocは、Executors.newCachedThreadPoolによって返されたサービスがスレッドを再利用すると言います。これはどのように可能ですか? スレッドを起動できるのは、startです。だから彼らはそれをどのように実装するのですか?このサービスのスレッドは無限ループで実行されており、Runnable-sは要求に応じて置き換えられますか?newCachedThreadPoolはどのようにスレッドを再利用しますか?

答えて

4

Runnableは別のRunnableを呼び出すことができます。

各スレッドは1つのメインRunnableのみを実行しますが、そのRunnableはRunnableを共有BlockingQueueから取り出し、シャットダウンするまで呼び出します。

簡略化します。

final BlockingQueue<Runnable> queue = ... 

Runnable runs = new Runnable() { public void run() { 
    while(running) 
     queue.take().run(); 
}}; 

コードを読んで実際の動作を確認できます。

+1

私は推測することができました...署名はこの機能を示唆しています。 – zeller

関連する問題