1

我正在阅读有关ThreadPoolExecutor的 Oracles 文档,特别是有关排队的信息,以防请求多于可用线程。但是我没有找到默认设置是什么。

要实例化 Executor,我唯一要做的就是:

executor = Executors.newFixedThreadPool(numberOfThreads);

其中 executor 来自 java.util.concurrent.ExecutorService,而 Executor 是 java.util.concurrent.Executors 给定的。

从那里开始,执行者再次出现的唯一行是:

executor.execute(worker);

如您所见,我从未设置有关执行程序正在使用的队列类型或大小的任何属性。

我想知道的是我链接的文档中描述的哪些策略正在被使用。

正如我所展示的那样实现:我使用的是无界队列吗?有界吗?如果是这样,默认尺寸是多少?

4

2 回答 2

1

您只需要阅读javadoc

公共静态 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 回答