Me gustaría tener un temporizador java.utils con un tiempo reiniciable en java. Necesito configurar un evento único para que ocurra en X segundos. Si no ocurre nada entre el momento en que se creó el temporizador y X segundos, entonces el evento ocurre de forma normal.Cronómetro reiniciable Java
Si, sin embargo, antes de que transcurran X segundos, decido que el evento debe ocurrir después de Y segundos, entonces quiero poder decirle al temporizador que restablezca su hora para que el evento ocurra en Y segundos. P. ej. el temporizador debe ser capaz de hacer algo como:
Timer timer = new Timer();
timer.schedule(timerTask, 5000); //Timer starts in 5000 ms (X)
//At some point between 0 and 5000 ms...
setNewTime(timer, 8000); //timerTask will fire in 8000ms from NOW (Y).
no veo una manera de hacer esto utilizando el temporizador de utilidades, como si se llama a cancelar() no se puede programar de nuevo.
La única forma en que he estado cerca de replicar este comportamiento es mediante el uso de javax.swing.Timer e implica detener el temporizador original y crear uno nuevo. es decir:
timer.stop();
timer = new Timer(8000, ActionListener);
timer.start();
¿Hay alguna manera más fácil?
Se habla de ScheduledThreadPoolExecutor en este temporizador: http://developer.android.com/reference/java/util/Timer.html –
El problema con este enfoque es que ya no tiene acceso a 'TimerTask .scheduledExecutionTime() 'dentro de su tarea. No podrá determinar si la tarea es "tardía" y no debería ejecutarse. –
use 'myScheduledThreadPoolExecutor.getQueue(). Clear()' para eliminar todas las tareas programadas que aún no se han ejecutado, pero no puede usar esta técnica con 'Executors.newSingleThreadScheduledExecutor()' en su lugar, debe instanciar un 'nuevo ScheduledThreadPoolExecutor (1) 'porque solo los métodos de interfaz están expuestos en el objeto devuelto por el Ejecutor. – gMale