如何配置ExecutorService newFixedThreadPool()行为?

时间:2016-03-18 11:14:23

标签: java executorservice

Oracle定义了newFixedThreadPool(1)方法,如下所示,

  

创建一个重用固定数量的线程的线程池   关闭共享的无界队列

我可以设置固定的队列大小,例如1,这样我就可以阻止正在处理的新任务,直到当前任务执行完成,甚至使用堆栈而不是队列,当及时工作时,一段时间后第一个任务可能无效因此可能需要固定大小的堆栈。

1 个答案:

答案 0 :(得分:1)

你做不到。 Executors提供了一些常用的静态工厂方法,如

public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>());
}

但如果这不是您所需要的,请自行制作ThreadPoolExecutor。 E.g。

public static ExecutorService newFixedThreadPoolWithBoundQueue(
        int nThreads,
        int capacity) {

    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>(capacity));
}
  

甚至使用堆栈而不是队列

我不会那样试试。