2010-12-20 4 views
2

시스템 클록에 독립적 인 방식으로 스레드를 일시 중지/대기시키는 방법이 필요합니다. 즉, 스레드가 dT msec 내에 약해지기를 원한다면이 시간 동안 시스템 시간이 크게 변경되는 경우에도 그렇게해야합니다. 나는 msecs의 정확도에 그다지 관심이 없다.Java System Clock 독립적 인 스케줄링/일시 정지

TimerTasks는 절대 시간에 작동하므로 옵션이 아닙니다.

답변

0

질문을 올바르게 이해할 수 있을지 잘 모르겠습니다. 작업 스케줄러가 필요하다면 Quartz이 꽤 좋습니다. 실제로 x 시간 동안 임의의 스레드를 일시 중지하려면 조금 더 까다로울 수 있습니다.

1

까다로운 .... 그것은 시스템 클럭도 특정 전략에 사용되고 있는지 알고 힘듭니다. 그러나 시계를 피하는 이유는 스레드 일시 중지 중에 시간이 변경 될 수 있기 때문입니다. System.nanoTime()은 JVM이 시작된 이후의 순수한 시간 (나노초)이기 때문에 현재 시간과 무관합니다. 따라서, 포즈 전략이 나노를 사용한다면, 휴지 기간이 시스템 클록 시간 변경을 통해 정확성을 유지한다고 가정 할 수있다. 아마 루프에서 전화를 Thread.join (0, 나노) :

public static void pause(long ms) throws InterruptedException { 
    long final ZERO = 0L; 
    int final MAX_NANOS = 999999; 
    for(int i = 0; i < ms+1; i++) { 
     Thread.currentThread().join(ZERO, MAX_NANOS); 
    } 
} 

나는 시스템 클럭의 변화를 테스트하지 못했지만, 0.004 %의 편차 내에서 실행 것으로 보인다.

관련 문제