我目前有一个类(class)列表,每个类(class)都启动一个这样的调度程序:
private ScheduledFuture<?> myTask;
private ScheduledExecutorService scheduler;
public startScheduler() {
scheduler = Executors.newScheduledThreadPool( 1 );
myTask = scheduler.scheduleAtFixedRate(new Runnable() {
// doing work here
},
delay,
interval,
TimeUnit.MILLISECONDS );
}
所以每个类(class)基本上都会启动自己的调度程序,并且只有一个任务。但据我所知,调度程序可以并行执行和运行更多任务。任务(或在我当前的程序中,调度程序)具有不同的延迟和间隔值,并且我不知道启动的调度程序的数量(因为用户可以启动新的并停止运行)。所有调度器并行运行。那么我应该更改我的代码以便只使用一个调度程序吗?我应该更喜欢“CachedThreadPool”吗?
最佳答案
是的,您可以只使用一个池来安排所有任务。此外,如果您需要像当前那样按时间间隔安排任务的能力,您应该坚持使用 newScheduledThreadPool
,因为 newCachedThreadPool
仅返回一个 ExecutorService
接口(interface)而不是 ScheduledExecutorService
。
关于java - ScheduledExecutorService 的多个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170568/