1

私は、 ThreadPoolExecutorに関する Oracle のドキュメントを読んでいました。特に、利用可能なスレッドよりも多くのリクエストがある場合のキューイングについて読んでいました。ただし、デフォルト設定が何であるかはわかりませんでした。

Executor をインスタンス化するには、次のことだけを行います。

executor = Executors.newFixedThreadPool(numberOfThreads);

ここで、executor は java.util.concurrent.ExecutorService からのもので、Executor は java.util.concurrent.Executors によって指定されたものです。

そこから、エグゼキュータが再び表示される唯一の行は次のとおりです。

executor.execute(worker);

ご覧のとおり、エグゼキューターが使用しているキューの種類やサイズに関するプロパティは設定していません。

私が知りたいのは、リンクしたドキュメントに記載されているどの戦略が使用されているかです。

私が示した実装では: 無制限のキューを使用していますか? 有界ですか?もしそうなら、デフォルトのサイズは何ですか?

4

2 に答える 2

1

javadocを読むだけです:

public static ExecutorService newFixedThreadPool(int nThreads)

無制限の共有キューで動作する固定数のスレッドを再利用するスレッド プールを作成します。どの時点でも、最大で nThreads スレッドがアクティブな処理タスクになります。すべてのスレッドがアクティブなときに追加のタスクが送信されると、それらのタスクは、スレッドが使用可能になるまでキューで待機します。

(私のものを強調)

最大限の柔軟性が必要な場合は、必要なすべての詳細を選択できる ThreadPoolExecutor コンストラクターを使用できます。

于 2013-11-15T11:02:11.653 に答える
0

Executors src を参照してください

public static ExecutorService  newFixedThreadPool(int nThreads) {
         return new ThreadPoolExecutor (nThreads, nThreads,
                                       0L, TimeUnit.MILLISECONDS,
                                       new LinkedBlockingQueue <Runnable >());
}

ご覧のとおり、無制限の LinkedBlockingQueue です

于 2013-11-15T11:07:20.200 に答える