java拒绝ExecutionException,即使ExecutorService由IsShutton()保护
我有一个让我发疯的问题,我需要请教你们的集体智慧
我有一个ThreadPoolExecutor,池为1,由Executors调用。newFixedThreadPool。我保护所有遗嘱执行人。执行()与!isShutdown()自执行器。shutdown()是从另一个线程调用的,因此应该能够说执行器不会抛出RejectedExecutionException。然而,这是我随机看到的
有人知道我为什么会看到这种行为吗
# 1 楼答案
您可能会阅读一篇关于double-checked locking的文章,以了解非同步的“if-then-act”方法在java中如何/为什么不起作用
出于好奇,你为什么要费心检查这项工作是否会被拒绝?我不记得以前见过这么做。相反,为什么不捕获并处理抛出的任何被拒绝的ExecutionException呢
还要注意如何处理其他错误情况,尤其是调用shutdown时正在队列中运行或等待的任务。《Java并发性在实践中》的第7章有很多关于这方面的好信息
# 2 楼答案
拒绝执行还有其他原因,请参见此处http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.html
很可能你的队伍已经到了极限