标签:
Executors.newFixedThreadPool 本意是创建一个固定大小的线程池,但这个线程池是什么执行的呢?
1、当一个任务提交执行后,就会先判断是否线程池的数量已经达到上限,如果没有则创建新的线程来执行任务,即使原来创建过的线程是空闲的也不会使用。看源码:
private boolean addIfUnderCorePoolSize(Runnable firstTask) { Thread t = null; final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { if (poolSize < corePoolSize && runState == RUNNING) t = addThread(firstTask); } finally { mainLock.unlock(); } if (t == null) return false; t.start(); return true; }
即只要线程池没有满就会创建新的线程,并不会因为线程池的其他线程是空闲的就不创建新线程
关于Executors.newFixedThreadPool何时创建新线程
标签:
原文地址:http://my.oschina.net/u/1159254/blog/523403