5

javadocによると、によって返されるサービスはExecutors.newCachedThreadPoolスレッドを再利用します。これはどのように可能ですか?スレッドは、を呼び出すことによって1回だけ開始できますstart。では、どのように実装するのでしょうか。このサービスのスレッドは無限ループで実行されており、それらのRunnable-sはオンデマンドで置き換えられますか?

4

1 に答える 1

4

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

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

簡略化されています。

final BlockingQueue<Runnable> queue = ...

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

コードを読んで、実際にどのように機能するかを確認できます。

于 2012-08-22T11:34:38.353 に答える