2016-12-21 8 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); 

옵션 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

어떤 용도로 더 많은 시스템 리소스를 사용할지에 대한 정확한 대답을 제공하기위한 구현 세부 사항을 알지 못합니다. 그러나 두 번째 옵션은 Javadoc, 자습서 등에서 지원하는 방법입니다. 몇 가지 이유가 있습니다. 첫째, ScheduledExecutorService 인터페이스는 단일 서비스로 여러 작업을 예약 할 수있는 기능을 제공합니다.

첫 번째 옵션을 사용하지 않는 이유가 있습니다. 세 명의 집행자를 사용하여 세 가지 작업을 예약하려고했습니다. 그러나 세 가지 작업이 모두 동시에 시작된다는 보장은 없지만 유언 집행자는 서로 다르며 여러 번에 스핀 업할 수 있습니다. 반면에, 하나의 Executor 서비스를 사용한다면 세 가지 작업이 동시에 시작되어야합니다.