2 u010226845 u010226845 于 2016.05.11 10:08 提问

多线程,线程池的一点问题 20C

最近维护别人的代码遇到一点线程池的问题,具体如下
ExecutorService pool = Executors.newFixedThreadPool(30);
接着循环3000多次,提交任务并返回Future,然后将其加入List
f = pool.submit(new Task());
list.add(f);//list有个初始大小2000
然后调用shutdown()关闭线程池
接着for循环list 取出任务执行结果
rank = task.get(2, TimeUnit.MINUTES);
问题如下:任务总是无法全部执行,并且抛出java.lang.InterruptedException异常
该异常出现在AbstractQueuedSynchronizer的await()方法中,跪求各问大神解决!

2个回答

lbcab
lbcab   2016.05.11 10:13

在异常捕获中加上 e.getCause().printStackTrace(); 看看造成异常的原因

u010226845
u010226845 大哥,线程池自动创建的LinkedBlockingQueue是无界的吧,怎么会满了呢。能加一下QQ聊一下吗?很急很关键 573310651
一年多之前 回复
lbcab
lbcab 回复Yanphet: 肯定有一些线程在做耗时的操作, 多分析一下日志,看看堆栈信息, 这个问题已经定位,只能调试才能找出原因
一年多之前 回复
lbcab
lbcab log中已经说明了, 造成死锁的原因是阻塞,线程等待, 因为阻塞队列满了. 分析一下dump日志里面线程各种状态, 看看问题出在那个线程上,
一年多之前 回复
u010226845
u010226845 回复lbcab: 结果为false,关闭后 线程还在运行任务,请问一下 然后呢?
一年多之前 回复
lbcab
lbcab 回复Yanphet: 使用isTerminated看看是否在线程池关闭后任务是否执行完毕
一年多之前 回复
u010226845
u010226845 Caused by: java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2048)
一年多之前 回复
u010226845
u010226845 Caused by: java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2048)
一年多之前 回复
u010226845
u010226845 Caused by: java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2048)
一年多之前 回复
u010226845
u010226845   2016.05.11 10:16

考虑是不是shutdown的原因呀?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!