ScheduledThreadPoolExecutor, comment arrêter de classe runnable JAVA

J'ai écrit le code suivant:

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
}
}

Je voudrais arrêter le ScheduledThreadPoolExecutor lorsque la touche func() est appelée. Il n'est pas nécessaire pour qu'il fonctionne plus! Je pense que je devrais mettre la fonction func() à l'intérieur des Électeurs de la classe, et de créer une sorte de rappel. Mais peut-être que je peux le faire à partir de l'intérieur de la séance de classe.

Comment puis-je le résoudre correctement?

Je ne suis pas du tout familier avec ScheduledThreadPoolExecutor, mais ma première hypothèse serait stpe.shutdown(). Vous devez faire stpe accessible à partir de func(). Il pourrait être raisonnable de commencer un deuxième fil (programmée?) qui court à la date limite de temps et appelle la shutdown() fonction.

OriginalL'auteur Khozzy | 2011-07-21