熟悉java多线程的朋友一??定对java线程池非常熟悉。jdk中的核心实现类是java.util.concurrent.ThreadPoolExecutor。你可能了解它的原理,甚至阅读它的源代码;但就像我一样,你可能对它的作用有误解。现在问题来了,jdk为什么要提供java线程池呢?使用java线程池每次都创建一个新的Thread有什么好处?对线程池的误解长期以来,我一直认为java线程池是为了提高多线程下创建线程的效率。创建一些线程并将它们缓存在线程池中。当后面有一个请求(Runnable)到来时,从连接池中取出一个线程来处理该请求;这避免了每次都创建一个新的Thread对象。直到前段时间看到NealGafter(与JoshuaBloch《Java Puzzlers》合着,目前在微软工作,主要从事.NET语言工作)的采访,里面有这么一段对话(http://www.infoq.com/cn/articles/neal-gafter-on-java):乍一看大神的思路不一样:java线程池是为了防止java线程占用太多资源?虽然是Java大神的专访,但也不能全信。你说资源被占用?还是得写测试用例测试一下。首先验证我的理解:java线程池和java线程的创建哪个更高效?直接上测试用例:publicclassThreadPoolTestextendsTestCase{privatestaticfinalintCOUNT=10000;publicvoidtestThreadPool()throwsInterruptedException{CountDownLatchcountDownLatch=newCountDownLatch(COUNT);ExecutorServiceexecutorService=ExecutorsService=ExecutorServicenewFixedThreadPool(100);longbg=System.currentTimeMillis();for(inti=0;i
