제 독서에서 ScheduledExecutorService는 Java에서 타이머를 시작하고 중지하는 올바른 방법입니다.ScheduledExecutorService를 사용하여 타이머를 시작 및 중지
타이머를 시작하고 중지하는 코드를 포트해야합니다. 이것은주기적인 타이머가 아닙니다. 이 코드는 타이머를 시작하기 전에 타이머를 중지합니다. 그래서, 모든 시작은 실제로 재시작()입니다. ScheduledExecutorService를 사용하여이 작업을 수행 할 올바른 방법을 찾고 있습니다. 여기에 내가 생각해 낸 것이있다. 일 내가 놓친 거지에 대한 의견과 통찰력을 찾고 :
ScheduledExecutorService _Timer = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> _TimerFuture = null;
private boolean startTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, do not interrupt it.
_TimerFuture.cancel(false);
}
_TimerFuture = _Timer.schedule(new TimerPopTask(),
TIMER_IN_SECONDS,
TimeUnit.SECONDS);
return true;
} catch (Exception e) {
return false;
}
}
private boolean stopTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, interrupt it here.
_TimerFuture.cancel(true);
}
return true;
} catch (Exception e) {
return false;
}
}
private class TimerPopTask implements Runnable {
public void run() {
TimerPopped();
}
}
public void TimerPopped() {
//Do Something
}
TIA, 루블
이 문제처럼 보인다
코드 작성된대로 컴파일되지 않습니다. startTimer()의 _batchTimer가 어디에도 선언되어 있지 않습니다. startTimer 및 stopTimer의 반환 값은 무엇입니까? 예상되는 동작에 대해 좀 더 자세히 설명하면 도움이 될 것입니다. 왜 start/stopTimer가 잠재적으로 호출을 막고 싶습니까? – Sbodd
@Sbodd, 타이머를 시작하려고 할 때 이미 타이머가 실행중인 경우이를 중지하고 동시에 두 개의 타이머가 터지지 않도록해야합니다. get() 대신에 cancel()을 호출해야합니다. – rouble