如何使用 ExecutorService 调度多个任务

CLI*_*CLI 5 java executorservice scheduledexecutorservice

我每 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);
Run Code Online (Sandbox Code Playgroud)

选项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);
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*sen 5

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

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