了解执行程序服务中的线程池大小

时间:2017-10-30 23:23:56

标签: java multithreading threadpool executorservice

我的线程池大小为3,如下所示,在构造函数中我使用相同的线程池来启动两个不同的线程:

  • 一个是调用实现Poller接口的Runnable类。
  • 其他是每1秒启动一个线程运行。

以下是我的代码:

private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(3);

private Data() {
  executorService.submit(new Poller());
  executorService.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
      for (Entry<Long, byte[]> entry : retryHolder.asMap().entrySet()) {
        execute(entry.getKey(), entry.getValue());
      }
    }
  }, 0, 1, TimeUnit.SECONDS);
}

我的问题是我需要大小为3的线程池,还是我可以在这里使用2?因为我知道根据我上面的代码它只会使用两个线程所以显然我可能会浪费另一个线程吗?

1 个答案:

答案 0 :(得分:1)

根据scheduleAtFixedRate的文档:

如果此任务的执行时间超过其周期,则后续执行可能会延迟,但不会同时执行。

所以你可以在你的池中只使用2个线程,但是在你的池中使用3个线程时,可能只有一个最小的(如果有的话)性能/开销下降。