当我使用Executors.newFixedThreadPool(10)时,框架是否在内部创建了一个阻塞队列?有没有办法在创建线程池时提供自己的队列?我不清楚oracle docs:here
答案 0 :(得分:1)
是的,确实如此here。
通常你需要一个阻塞队列,因为队列的目的是保留作业以防止压倒性的Executor
。您可以实现自己的Executor
+ ExecutorService
并在那里使用自定义队列,或者,您可以使用带有impl的ThreadPoolExecutor
,类似于:
88 public static ExecutorService More ...newFixedThreadPool(int nThreads) {
89 return new ThreadPoolExecutor(nThreads, nThreads,
90 0L, TimeUnit.MILLISECONDS,
91 new LinkedBlockingQueue<Runnable>());
92 }
如果队列未阻止,那么您将开始拒绝任务,如上所述here。