2
回答
java 线程池使用无界LinkedBlockingDeque队列,运行线程个数问题
注册华为云得mate10,2.9折抢先购!>>>   
ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 20, 3,
					TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(),
					new ThreadPoolExecutor.CallerRunsPolicy()) {
				protected void terminated() {
					log.debug("threadPool shutdown  time : "
							+ new Date().toGMTString());
				}
			};

1:问题:
     以上如果有十万个任务需要处理,则线程池会有多少个线程在运行呢?

     我自己做的例子得出的结论是只有一个线程在运行。原因是线程池初始化1个线程,最大20个线程。如果需要新增线程来处理任务的前提条件是 当前运行的线程小于20<参数:maximumPoolSize>并且队列满的情况下才会新增线程。但是我使用的是无界队列。这个queue可以说是无界的了<Integer.MAX_VALUE>。是不会蛮的。我的理解和自己写test证实了这段代码里面只会有一个线程在运行任务。

不知道我的理解和test代码是否有问题。敬请各位来讨论!!!


<无标签>
举报
古月楼
发帖于4年前 2回/4K+阅
顶部