Oracle定义了newFixedThreadPool(1)方法,如下所示:
创建一个线程池,该线程池可重用固定数量的操作线程
共享无界队列
我是否可以将队列大小设置为固定的值(例如1),以便可以阻止正在处理的新任务,直到当前任务执行完成,甚至可以使用堆栈代替队列。如果及时工作,一段时间后第一个任务可能无效,因此可能需要固定大小的堆栈。
最佳答案
你不能Executors
提供了一些常用的静态工厂方法,例如
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
但是,如果这不是您需要的,请创建自己的
ThreadPoolExecutor
。例如。public static ExecutorService newFixedThreadPoolWithBoundQueue(
int nThreads,
int capacity) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(capacity));
}
甚至使用堆栈代替队列
我不会尝试的。