java ThreadPoolExecutor default



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

要实例化执行器,我唯一要做的就是:

executor = Executors.newFixedThreadPool(numberOfThreads);

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

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

executor.execute(worker);

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

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

通过我所展示的实现:我是否使用无限队列?它是有界的吗?如果是这样,默认大小是多少?

你只需要阅读javadoc:

public static ExecutorService newFixedThreadPool(int nThreads)

创建一个线程池

,该线程池重用在共享的无限队列中运行的固定数量的线程。在任何时候,大多数 nThreads 线程都将是活动的处理任务。如果在所有线程都处于活动状态时提交其他任务,它们将在队列中等待,直到线程可用。

(强调我的)

如果你想要最大的灵活性,你可以使用ThreadPoolExecutor构造函数,它将让你选择你想要的每一个细节。

参见 Executors src

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

正如我们所看到的,它是无限的 LinkedBlockingQueue

相关内容

  • 没有找到相关文章

最新更新