ScheduledExecutorService的多个任务

Bie*_*aja 5 java multithreading

我目前有一个班级列表,每个班级都会启动一个调度程序,如下所示:

private ScheduledFuture<?> myTask;
private ScheduledExecutorService scheduler;

public startScheduler() {
scheduler = Executors.newScheduledThreadPool( 1 );
    myTask = scheduler.scheduleAtFixedRate(new Runnable() {
          // doing work here
     },
          delay,
          interval,
          TimeUnit.MILLISECONDS );
}
Run Code Online (Sandbox Code Playgroud)

因此,每个类基本上都启动它自己的调度程序,并且只有一个任务。但是据我了解,调度程序可以并行执行并运行更多任务。这些任务(或在我当前的程序中,调度程序)具有不同的延迟和间隔值,并且启动的调度程序的数量对于我来说是未知的(因为用户可以启动新的调度程序并停止运行它们)。所有调度程序并行运行。那么我应该更改我的代码以仅使用一个调度程序吗?我应该选择“ CachedThreadPool”吗?

cas*_*nca 4

是的,您可以仅使用一个池来安排所有任务。另外,如果您需要像当前一样按时间间隔安排任务的能力,您应该坚持使用,newScheduledThreadPool因为newCachedThreadPool仅返回一个ExecutorService接口而不是ScheduledExecutorService.

  • 我尝试在这里测试它:http://pastebin.com/p6E1bt1N 对于 1,他似乎只使用 1 个线程,因此执行第一个线程,然后在完成执行第二个 5 次间隔后。他同时运行两个。因此每秒运行第二个。 (4认同)
  • 这似乎不是真的。 (2认同)