我有一个ThreadPoolExecutor是用一个无界队列(LinkedBlockingQueue)和一个核心和最大池大小设置为cpus数(比如说4)构造的。我不明白这个ThreadPoolExecutor行为
每当我得到一个RejectedExecutionException异常。执行器处于运行状态。我的理解是,这不应该发生在无边界的队列中。
我一直没有能够在调试器中看到发生了什么,但是从堆栈跟踪看起来像在ThreadPoolExecutor.execute中,workQueue.offer返回false,所以它跳转到位它试图启动一个新的线程。但是poolSize已经在最大值,所以它会抛出被拒绝的执行异常。
我不太明白这一点。
但是无论如何,我是否应该使最大池大小比核心池大小大一点?
看看这个优秀的答案,并upvote它:http://stackoverflow.com/questions/1800317/impossible-to-make-a-cached-thread-pool-with-a-size-limit/1800583# 1800583 –
这个答案只是证实@deliciousirony看到的行为不应该发生。 – Thilo
你可以发表一些代码吗? – jiggy