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));
}



甚至使用堆栈代替队列


我不会尝试的。

07-28 04:50