無制限のキュー (LinkedBlockingQueue) と、CPU の数 (たとえば 4) に設定されたコアと最大プール サイズで構築された ThreadPoolExecutor があります。
私が RejectedExecutionException を取得している間は、すべて素晴らしいです。Executor は実行中の状態です。私の理解では、これは無制限のキューでは発生しないはずです。
デバッガーでこれをキャッチして何が起こっているのかを正確に確認することはできませんでしたが、スタック トレースからは ThreadPoolExecutor.execute のように見え、workQueue.offer が false を返しているため、スピンしようとするビットにジャンプします。新しいスレッドを立てます。ただし、poolSize は既に最大になっているため、拒否された実行例外がスローされます。
これはよくわかりません。
ただし、最大プール サイズをコア プール サイズよりも少し大きくする必要がありますか?