Java Executor服务线程池
如果我使用Executor框架在java中创建一个包含10个线程的固定大小的线程池:
private final ExecutorService pool; pool = Executors.newFixedThreadPool(10);
然后尝试提交10个以上的任务(例如,12个任务);
for (int i = 0 ; i < 12 ; i++) { pool.execute(new Handler(myRunnable)); }
额外任务会发生什么(根据12个任务的例子,额外的两个任务)? 在线程完成工作之前它们会被阻塞吗?
为Executors.newFixedThreadPool(int nThreads)
引用Javadoc( 强调我的 ):
创建一个线程池,该池重用在共享的无界队列中运行的固定数量的线程。 在任何时候,最多nThreads线程将是活动的处理任务。 如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到线程可用 。 如果任何线程由于在关闭之前执行期间的故障而终止,则如果需要执行后续任务,则新线程将取代它。 池中的线程将一直存在,直到它被明确关闭。
像Java Concurrency Framework一样成熟的代码的Javadoc包含大量的知识。 让他们靠近。
- 如何在java执行器类中停止所有可运行的线程?
- 优雅地将队列长度指示符实现到ExecutorServices
- ExecutorService与Casual Thread Spawner
- newFixedThreadPool()vs newCachedThreadPool()
- ExecutorService的未来任务并未真正取消
- 在ExecutorService上安排的守护程序线程; 解释为什么这是不好的forms
- 在关闭执行程序之前等待所有线程完成
- 什么是Java中最快的循环同步(ExecutorService与CyclicBarrier vs.X)?
- 如何使用invokeAll()让所有线程池完成他们的任务?