我的线程池大小为3,如下所示,在构造函数中我使用相同的线程池来启动两个不同的线程:
Poller
接口的Runnable
类。以下是我的代码:
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?因为我知道根据我上面的代码它只会使用两个线程所以显然我可能会浪费另一个线程吗?
答案 0 :(得分:1)
根据scheduleAtFixedRate
的文档:
如果此任务的执行时间超过其周期,则后续执行可能会延迟,但不会同时执行。
所以你可以在你的池中只使用2个线程,但是在你的池中使用3个线程时,可能只有一个最小的(如果有的话)性能/开销下降。