【问题标题】:How to schedule multiple tasks with ExecutorService如何使用 ExecutorService 调度多个任务
【发布时间】:2016-12-21 15:06:07
【问题描述】:

我每 1 分钟执行三个独立任务。 在这里,我开发了两个选项。

选项1

ScheduledExecutorService service1 = Executors.newScheduledThreadPool(1); 
ScheduledExecutorService service2 = Executors.newScheduledThreadPool(1); 
ScheduledExecutorService service2 = Executors.newScheduledThreadPool(1); 
service1.scheduleAtFixedRate(new task1(), 0, 60, TimeUnit.SECONDS); 
service2.scheduleAtFixedRate(new task2(), 0, 60, TimeUnit.SECONDS); 
service3.scheduleAtFixedRate(new task3(), 0, 60, TimeUnit.SECONDS);

选项2

ScheduledExecutorService service = Executors.newScheduledThreadPool(3);
service.scheduleAtFixedRate(new task1(), 0, 60, TimeUnit.SECONDS);
service.scheduleAtFixedRate(new task2(), 0, 60, TimeUnit.SECONDS);
service.scheduleAtFixedRate(new task3(), 0, 60, TimeUnit.SECONDS);

我的问题是首选哪个选项? Option1 是否会消耗更多系统资源?

【问题讨论】:

    标签: java executorservice scheduledexecutorservice


    【解决方案1】:

    我不知道实现细节,无法准确回答哪种使用会消耗更多系统资源。但是第二种选择绝对是Javadoc、教程等支持的方式。我可以指出一些原因。首先,ScheduledExecutorService 接口公开了使用单个服务调度多个任务的能力。

    还有一个理由不使用第一个选项。您试图使用三个单独的执行程序来安排三个任务。但是不能保证所有三个任务都会同时开始,但是执行者是不同的,可以在不同的时间启动。另一方面,如果您使用单个执行器服务,则三个任务应该同时启动。

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      相关资源
      最近更新 更多