【问题标题】:understanding of thread pool size in executor serviceexecutor服务中线程池大小的理解
【发布时间】:2023-03-30 18:29:01
【问题描述】:

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

  • 一种是调用实现Runnable接口的Poller类。
  • 其他是每 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 个?因为我知道按照我上面的代码它只会使用两个线程,所以显然我可能会浪费另一个线程?

【问题讨论】:

  • 是的。两个线程就足够了。

标签: java multithreading threadpool executorservice


【解决方案1】:

根据scheduleAtFixedRate的文档:

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

因此,您可以在池中仅使用 2 个线程,但在池中使用 3 个线程可能只会带来最小(如果有的话)性能/开销下降。

【讨论】:

  • 你应该只使用 2 个线程就可以了 不太正确。毫无疑问:OP肯定只使用 2 个线程就可以了,因为根据 不会同时执行,最多只有 2 个线程同时运行。
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
  • 2022-12-29
  • 2013-04-14
  • 2010-11-10
  • 2020-08-30
相关资源
最近更新 更多