2013-10-15 2 views
1

Java의 Scheduled Thread Pool Executor에서 다음과 같은 것이 가능한지 궁금합니다. 고정 지연, 다중 Runnables, List<MyObject>에서 MyObject에 대한 각 Runnable 일정으로 STPE을 예약하고 싶습니다. 아래 코드는 아무 문제없이이 작업을 수행하는 것 같습니다. 그러나 나는 또한 모든 Runnables가 정확히 같은 시간에 실행되기를 바랄 것이다. 이게 가능합니까? 어떻게해야합니까? 그렇지 않다면 내가 필요한 것을 성취 할 수있는 또 다른 방법이 있습니까? 또한 매 1 초마다 실행되도록 스레드가 필요합니다.동시에 여러 개의 Runnables가 예약 된 ScheduledThreadPoolExecutor는 어떻게 작동합니까?

private List<MyObject> myObjects... 


int corePoolSize = 1; 
long initialDelay = 1L;//1 second 
long delay = 1L;//1 second 
ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(corePoolSize); 

for (int i = 0; i < myObjects.size(); i++) { 

    stpe.scheduleWithFixedDelay(new Runnable() { 
     @Override 
     public void run() { 

      //DO SOMETHING 

     } 
    }, initialDelay, delay, TimeUnit.SECONDS); 
} 
+0

'cron'이 필요합니다. –

답변

0

그들을 정확히 동시에 실행해야하는 방법은 기술적 없습니다, 당신은 그러나 그들이 거의 동시에 실행 할 수 있습니다.

당신이 이미 제시 한 옵션 외에도, 우선 스레드가 특정 장벽에서 멈추고 메인 스레드가 그 장벽을 열면 작업을 시작할 수 있습니다. Java는 CyclicBarrier (1 회 사용) 또는 Phaser (여러/유연 사용)를 제공합니다.

관련 문제