ThreadPoolExecutor 和 ArrayBlockingQueue

ThreadPoolExecutor and ArrayBlockingQueue

请原谅我的英语不好。 当池中的线程数上升到 10 以上时,任务将被放入 ArrayBlockingQueue 中。但如果任务可调用呢?构造函数 ThreadPoolExecutor 不接受类型为 Callable 的 ArrayBlockingQueue。那么,如何将任务添加到队列中呢?

ExecutorService executorService = new ThreadPoolExecutor(2, 10,
                60L, TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(100));

发生的情况是 ThreadPoolExecutor 没有直接将您的 Callable 添加到队列中。相反,它会将 Callable 包装成 RunnableFuture 通过调用方法 AbstractExecutorService.newTaskFor(Callable),然后将此 RunnableFuture 添加到队列中。