2012-02-10 3 views
1

Meet Janitor, 매일 오전 3시에 실행되는 타이머. 시간에 특정 시점에서Java Timer 다음 실행 시간

Timer janitorTimer = new Timer(); 
TimerTask janitorWorker = new Janitor(); // Extending TimerTask 
long delay = TimeUtils.getMillisUntilTomorrowAt(3L * 3600000L); // Does what it says 
janitorTimer.scheduleAtFixedRate(janitorWorker, delay, 24L * 3600000L); 

나는 다음 janitorWorker 실행 때 을 알고 싶습니다.

Timer 또는 TimerTask와 관련된 항목을 찾을 수 없습니다. 이미 알고 있어야하는 느낌. 당신이 (가) nextExecutionTime 노출하고 현재 시간에 그 comapre 수 TimerTask의 구현에

+0

'TimerTask.scheduledExecutionTime()'(API 문서 참조)를 찾고 계십니까? – Jesper

+1

@Jesper : scheduledExectionTime()은 * next * 시간이 아니라 마지막으로 작업이 실행 된 시간에 대한 예약 된 실행 시간을 반환합니다. –

+0

답변을 찾았습니까 ?? –

답변

1

는이 mainLoopTimerTask에서

+0

TimerTask에서 nextExecutionTime을 저장하면 여러 타이머가 다른 시간에이 작업을 실행할 수 있기 때문에 작동하지 않습니다. – MonoThreaded

-1

Timer에, scheduledExecutionTime()라는 방법을 존재를 참조하십시오. 그것이 무엇 것은 :

이 작업의 가장 최근의 실제 실행의 예약 된 실행 시간을 돌려줍니다.

참조 : http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html#scheduledExecutionTime%28%29

UPDATE : 여기

새로운 방법입니다. 그것은 고정 된 속도를 가지고 있기 때문에

은, 당신이 할 수있는 것은 scheduledExecutionTime()가에 있도록, fixedRate 값을 추가하고 다음 nextExecutionTime 추론 전화입니다.

+0

scheduledExecutionTime은 LAST를 제공하고 NEXT 실행 시간 이후입니다. – MonoThreaded

+0

시도해 보셨습니까? –

+0

_Returns : Date.getTime()이 반환 한 형식으로이 작업의 가장 최근 실행이 발생하도록 예약 된 시간입니다. _ –

0

작업이 아직 실행되지 않은 경우 방법 scheduledExecutionTime은 정의되지 않습니다. 그러나 한 번 실행되는 작업이 예약 된 내 응용 프로그램에서는이 메서드가 실제로 실행 전후의 예약 된 시간을 반환합니다.
참고이 동작은 장치마다 다르고 문서화되지 않았습니다. 따라서이 방법은 각 장치에 대해 검증되어야하며 일반적으로 권장 할 수는 없습니다.

+0

Sean Reilly의 질문에 대한 언급에서 언급 한 것처럼 문서는'scheduledExecutionTime'은 * last * 실행 시간을 알려줍니다 * * 달리기로되어있다. 질문에 대한 질문 인 * next * 실행 시간을 반환하지 않아야합니다. – Laogeodritt

+0

예, 설명서를 읽었으며 물론 scheduledExecutionTime은 최신 실행 시간을 위해 설계되었습니다. 그러나 한 번 실행되는 작업의 경우, 앞으로도이 시간이 예정된 유일한 실행 시간을 반환한다는 것을 알 수 있습니다. PS 모든 기기에서 동일한 지 확실하지 않습니다. PPS 내 게시물을 편집 해 주셔서 감사합니다. 나 또한 하이퍼 링크를 포맷하려했지만 관리 할 수 ​​없었습니다. – Spectorsky

+0

아, 알 겠어요. 당신의 대답을 읽을 때 나는 그 뉘앙스를 놓쳤습니다. 당신이 문서화되지 않은 행동을 언급하고 있다는 사실은 그 해답에 명시되어야하며 일반적으로 Java의 다른 버전이나 배포판에서 깨질 수 있으므로 일반적으로이 동작에 의존해서는 안됩니다. – Laogeodritt