Comment arrêter un ScheduledExecutorService?
Le programme se termine après neuf épreuves:
class BeeperControl {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public void beep() {
final Runnable beeper = new Runnable() {
public void run() {
System.out.println("beep");
}
};
final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
beeper, 1, 1, SECONDS);
scheduler.schedule(new Runnable() {
public void run() {
beeperHandle.cancel(true);
}
}, 1 * 9, SECONDS);
}
public static void main(String[] args) {
BeeperControl bc = new BeeperControl();
bc.beep();
}
}
Comment arrêter un processus (processus java dans eclipse par exemple), car il ne s'arrête pas après un délai de 9 secondes?
Eh bien ... Que voulez-vous dire par "il ne s'arrête pas après un délai de 9 secondes"? Je viens de tester, et le "bip"s arrête au bout de 9 secondes, comme prévu. L'ensemble du programme ne s'arrête pas, bien sûr, parce que vous n'avez pas l'arrêt du pool de threads. Si - au lieu de supprimer le bip - vous simplement arrêter le planificateur après 9 secondes, votre programme va également sortir normalement. C'est que le comportement que tu voulais?
OriginalL'auteur ferro | 2015-12-10
Vous devez vous connecter pour publier un commentaire.
Le problème que vous avez est que le planificateur assure une discussion en direct, après avoir annulé le bip de la tâche.
Si il y a un live non-démon fil, la machine reste en vie.
La raison qu'elle garde ce fil autour, c'est que vous lui avez dit de le faire dans cette ligne:
Note la documentation de
newScheduledThreadPool(int corePoolSize)
:Donc, vous avez deux façons possibles à cause de la JVM à mettre fin à:
Passer
0
ànewScheduledThreadPool
au lieu de 1. Le planificateur ne vais pas garder un fil en direct, et la JVM va se terminer.Arrêter le planificateur. Vous êtes censé le faire de toute façon à la libération de ses ressources. Donc changer le
run
dans votre anonymeRunnable
:(En fait, vous n'avez pas besoin de la
cancel
yshutdown
prendra effet dès que la prochaine "bip ""bip" est terminé.)OriginalL'auteur RealSkeptic