如何使用ExecutorService安排多个任务

时间:2016-12-21 15:06:08

标签: executorservice

我每隔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是否消耗更多系统资源?

1 个答案:

答案 0 :(得分:1)

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

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