了解executor服务中的线程池大小



我的线程池大小为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?因为我知道根据我上面的代码,它只会使用两个线程,所以很明显我可能在浪费另一个线程?

    根据scheduleAtFixedRate:

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

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

    最新更新