Según mis lecturas, parece que ScheduledExecutorService es la forma correcta de iniciar y detener temporizadores en Java.usando ScheduledExecutorService para iniciar y detener el temporizador
Necesito cargar un código que inicia y detiene un temporizador. Este no es un temporizador periódico. Este código, detiene el temporizador antes de iniciarlo. Entonces, efectivamente cada inicio es realmente un reinicio(). Estoy buscando la forma correcta de hacerlo utilizando el ScheduledExecutorService. Esto es lo que se me ocurrió. En busca de comentarios y visión sobre las cosas me faltan:
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, rublo
Código tal como está escrito no compilará: _batchTimer en startTimer() no está declarado en ningún lado. Sería útil si pudiera entrar un poco más en detalle sobre los comportamientos esperados: ¿cuáles son los valores de retorno de startTimer y stopTimer? ¿Por qué quieres que start/stopTimer bloquee potencialmente las llamadas? – Sbodd
@Sbodd, cuando voy a iniciar un temporizador, si ya hay un temporizador en ejecución, quiero detenerlo, de modo que no tengo dos temporizadores apareciendo al mismo tiempo. Creo que en lugar de get() allí, solo necesito llamar a cancel() en la instancia futura. – rouble