Dans la programmation multithread Java, le type java.lang.Thread contient une série de méthodes start(), stop(), stop(Throwable) et suspend(), destroy() et curriculum vitae(). Grâce à ces méthodes, nous pouvons effectuer des opérations pratiques sur les threads, mais parmi ces méthodes, seule la méthode start() est conservée.
Les raisons de l'abandon de ces méthodes sont expliquées en détail dans un article de Sun « Pourquoi Thread.stop, Thread.suspend et Thread.resume sont-ils obsolètes ?
Si vous avez vraiment besoin de mettre fin à un thread, vous pouvez utiliser les méthodes suivantes :
1. Laissez la méthode run() du thread terminer son exécution et le thread se terminera naturellement. (Cette méthode est la meilleure)
2. Terminez le fil en interrogeant et en partageant les bits d'indicateur, tels que while(flag){}, la valeur initiale de flag est définie sur true, et lorsqu'il doit être terminé, définissez la valeur de flag sur false. (Cette méthode n'est pas très bonne non plus, car si la méthode while(flag){} se bloque, le flag deviendra invalide)
arrêt booléen volatile privé = faux ;
public void terminate() {
arrêter = vrai ;
}
public void run() {
pendant que(arrêter) {
// ... quelques déclarations
}
}
}
Si le thread entre dans l'état Not Runnable en raison de l'exécution de sleep() ou wait(), s'il s'agit de wait(), cela ne fonctionnera pas si le bit d'indicateur est utilisé.
attente publique finale nulle (long délai d'attente)
throws InterruptedException Cette méthode amène le thread actuel (appelez-le T) à se placer dans l'ensemble d'attente de l'objet, puis à abandonner toutes les exigences de synchronisation sur cet objet. Autrement dit, le thread actuel devient un état d'attente
Utilisation standard de wait()
synchronisé(obj){
while(<condition non remplie>){
obj.wait();
}
Processus de traitement qui satisfait aux conditions
}
Et vous voulez l'arrêter, vous pouvez utiliser le troisième, c'est-à-dire
3. Utilisez interrompu () et le programme lancera une exception InterruptedException, obligeant ainsi le thread d'exécution à quitter la méthode run ().
Par exemple:
classe publique SomeThread {
public static void main (String[] arguments)
{
Thread thread=nouveau Thread(nouveau Runnable(){
public void run() {
tandis que (!Thread.interrupted()) {
// Traiter le travail à traiter
essayer {
System.out.println("aller dormir");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("Je suis interrompu !");
}
});
thread.start();
thread.interrupt();
}
}
aller dormir
je suis interrompu!