He escrito el siguiente código:ScheduledThreadPoolExecutor, cómo dejar de JAVA clase ejecutable
import java.util.Calendar;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
class Voter {
public static void main(String[] args) {
ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(2);
stpe.scheduleAtFixedRate(new Shoot(), 0, 1, TimeUnit.SECONDS);
}
}
class Shoot implements Runnable {
Calendar deadline;
long endTime,currentTime;
public Shoot() {
deadline = Calendar.getInstance();
deadline.set(2011,6,21,12,18,00);
endTime = deadline.getTime().getTime();
}
public void work() {
currentTime = System.currentTimeMillis();
if (currentTime >= endTime) {
System.out.println("Got it!");
func();
}
}
public void run() {
work();
}
public void func() {
// function called when time matches
}
}
quisiera detener el ScheduledThreadPoolExecutor cuando la func() se llama. ¡No hay necesidad de que funcione más! Creo que debería poner la función func() dentro de la clase Votante, y luego crear algún tipo de devolución de llamada. Pero tal vez puedo hacerlo desde dentro de la clase Shoot.
¿Cómo puedo resolverlo correctamente?
No estoy muy familiarizado con 'ScheduledThreadPoolExecutor', pero mi primera conjetura sería' stpe.shutdown() '. Necesitas hacer que 'stpe' sea accesible desde' func() 'para eso. Puede ser razonable comenzar un segundo hilo (¿programado?) Que se ejecuta en el tiempo límite y llama a la función 'shutdown()'. – Dorus