2
Java ThreadPoolExecutor:コアプールサイズを更新すると、着信タスクが断続的に動的に拒否される
ThreadPoolExecutorプールの作成後にのコアプールサイズを別の数値に変更しようとすると、タスクの数をRejectedExecutionException超えて送信しなくても、一部のタスクが断続的に拒否されるという問題が発生していますqueueSize + maxPoolSize。 私が解決しようとしている問題はThreadPoolExecutor、スレッドプールのキューにある保留中の実行に基づいてコアスレッドのサイズを変更して拡張することです。デフォルトでThreadPoolExecutorはThread、キューがいっぱいの場合にのみ新しいが作成されるため、これが必要です。 これは、問題を示す小さな自己完結型のPure Java 8プログラムです。 import static java.lang.Math.max; import static java.lang.Math.min; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class ThreadPoolResizeTest { public static void main(String[] args) throws Exception { // increase the number of iterations if unable to reproduce // for me …