4

我有一个问题让我发疯了一段时间,我需要咨询你的集体智慧。

我有一个池为 1 的 ThreadPoolExecutor,从 Executors.newFixedThreadPool 调用。我用 !isShutdown() 保护所有 executor.execute(),因为 executor.shutdown() 是从另一个线程调用的,因此应该可以说 executor 不会抛出 RejectedExecutionException。不过,这是我随机看到的。

有谁知道为什么我会看到这种行为?

4

2 回答 2

1

您可能会阅读有关双重检查锁定的文章,以了解不同步的“if then act”方法如何/为什么在 java 中不起作用。

出于好奇,您为什么要费心检查作品是否会被拒绝?我不记得以前看过这个。相反,为什么不捕获并处理任何抛出的 RejectedExecutionExceptions?

还要注意如何处理其他错误情况,尤其是在调用 shutdown 时正在运行或在队列中等待的任务。Java Concurrency in Practice 的第 7 章对此有很多很好的信息。

于 2011-06-28T02:27:30.510 回答
0

此处详细说明了拒绝执行的其他原因http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.html

您的队列很可能已达到其界限。

于 2011-06-28T01:05:53.573 回答