2016-12-21 48 views
2

我有三個獨立任務要在每1分鐘執行一次。 在這裏我已經開發了兩個選項。如何使用ExecutorService安排多個任務

選項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); 

1選項

 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

我不知道實施細節以準確答案,以確定哪種使用會消耗更多的系統資源。但第二種選擇絕對是由Javadoc,教程等支持的方式。我可以指出一些原因。首先,ScheduledExecutorService界面顯示了使用單一服務安排多個任務的能力。

還有一個原因是不使用第一個選項。您正在嘗試使用三個獨立的執行程序來安排三個任務。但不能保證所有三項任務將同時開始,但執行者是不同的,並可能在不同的時間分裂。另一方面,如果您使用一個執行器服務,則應該同時開始三個任務。