我每隔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是否消耗更多系统资源?
答案 0 :(得分:1)
我不知道实现细节,以准确回答哪些用法会占用更多系统资源。但第二种选择绝对是Javadoc支持的方式,教程等。我可以指出一些原因。首先,ScheduledExecutorService
接口公开了使用单个服务安排多个任务的能力。
还有一个原因是不使用第一个选项。您试图使用三个单独的执行程序安排三个任务。但是不能保证所有三个任务都会同时开始,但执行者是不同的,可以在不同的时间旋转。另一方面,如果您使用单个执行程序服务,则应同时启动三个任务。