ScheduledThreadPoolExecutor 개체를 사용하여 작업을 예약하고 있습니다. I는 이하의 방법에 사용CPU 시간 차이로 인해 ScheduledThreadPoolExecutor에서 잘못된 시간이 실행됩니다.
public ScheduledFuture<?> schedule(Runnable command, long delay,TimeUnit unit)
을 30 초 (지연 = 30,000 단위 = TimeUnit.MILLISECONDS)의 지연을 설정. 때로는 작업이 즉시 발생하고 다른 작업에는 70 초가 걸리기도합니다.
저는 ScheduledThreadPoolExecutor가 CPU 특정 클럭을 사용한다고 생각합니다. 난 [CPU 특정]에 System.currentTimeMillis() System.nanoTime()를 비교 테스트를 실행하면 난 다음
일정 참조 : 1272637682667ms
차이가 7858386270968425ns : 1272637682651ms,
실행 7858346157228410ns 어떻게이 문제를 해결 할 40초
두 개의 CPU 클럭 사이의 불일치가 같은 16ms하지만 4011374001ns (또는 40,113ms)
은 그래서 보이는 난 n 자바 코드? 불행히도 이것은 클라이언트 컴퓨터이며 시스템을 수정할 수 없습니다.
까다로운 것. 아마'java.util.Calendar'가 도움이 될까요? Calendar.getInstance() 등 –
Virual Machine (VMWare, KVM, Virtual PC)에서이 코드를 실행하고 있습니까? 가상화는 밀리 초 수준의 CPU 클럭으로 인해 혼란을 야기 할 수 있습니다. –
Windows XP Professional 컴퓨터에서 직접 실행됩니다. 가상화가 필요 없습니다. – richs