Java执行器服务线程池

4

如果我在Java中使用Executor框架创建一个有10个线程的固定大小线程池:

private final ExecutorService pool;
pool = Executors.newFixedThreadPool(10);

然后尝试提交超过10个任务(比如说,12个任务);

for (int i = 0 ; i < 12 ; i++) {
    pool.execute(new Handler(myRunnable));
}

额外的任务会发生什么情况(例如,12个任务的示例中的额外两个任务)?它们会被阻塞直到线程完成工作吗?

2
正如 @Sahil 所指出的那样,在 javadoc 中已经说明了! - mre
1
你可以通过阅读Javadoc自己回答这个问题。 - Jim Garrison
我确实尝试过,但遇到了一些疑问。 - Izza
1个回答

23

引用 Executors.newFixedThreadPool(int nThreads) 方法的 Javadoc (我加重了重点):

创建一个线程池,在共享的无界队列上重用固定数量的线程。在任何时候,最多有 nThreads 线程处于激活状态以处理任务。 如果所有线程都处于活动状态时提交了额外的任务,则它们将在队列中等待,直到有线程可用为止。如果任何线程在关闭之前由于执行期间的故障而终止,如果需要执行后续任务,将替换新线程。线程池中的线程将一直存在,直到显式关闭。

诸如 Java Concurrency Framework 这样成熟的代码的 Javadocs 包含了大量知识。请始终保持接近它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接