我有一个 ThreadPoolExecutor,它由一个无界队列(LinkedBlockingQueue)和一个核心和最大池大小设置为 cpu 数(比如 4)。
当我收到 RejectedExecutionException 时,每一次都很棒。Executor 处于运行状态。我的理解是这不应该发生在无界队列中。
我无法在调试器中捕捉到这一点,以查看到底发生了什么,但从堆栈跟踪来看,它看起来像在 ThreadPoolExecutor.execute 中,workQueue.offer 返回 false,所以它跳转到它尝试旋转的位开了一个新话题。但是 poolSize 已经是最大值了,所以它抛出了被拒绝的执行异常。
我不太明白这一点。
但无论如何,我应该让最大池大小比核心池大小大一点吗?