Heim  >  Artikel  >  Java  >  Mehrere Möglichkeiten zum Beenden von Java-Threads und Analyse von Beispielen

Mehrere Möglichkeiten zum Beenden von Java-Threads und Analyse von Beispielen

WBOY
WBOYnach vorne
2023-04-27 10:31:071635Durchsuche

Mehrere Möglichkeiten zum Beenden von Java-Threads und Analyse von Beispielen

Fragenanalyse

Die Antwort lautet C

A: Der Thread verwendet die Methode „sleep()“, um den Thread für einen bestimmten Zeitraum anzuhalten, anstatt ihn zu beenden.

B: Wenn ein neuer Thread erstellt wird, ist dies der Fall Keine Auswirkung auf den vorherigen Thread

C: Eine Ausnahme auslösen und der Thread wird beendet

D: Es handelt sich nicht um eine Beendigung, sondern um eine vorzeitige Beendigung. Der Prozess ist die grundlegendste Einheit der Ressourcenzuteilung, die von demselben Prozess erstellt wird Diese Ressourcen. Wenn ein Thread eine höhere Priorität hat, werden die Ressourcen anderer Threads beansprucht, was dazu führt, dass andere Threads keine Ressourcen mehr haben, was zu einer Blockierung führt

Drei Gründe für das Ende des Threads

1 Die Ausführungsmethode wird ausgeführt und der Thread endet normal

2. Der Thread löst eine nicht abgefangene Ausnahme oder einen Fehler aus

3. Rufen Sie direkt die Stop-Methode des Threads auf, um den Thread zu beenden (nicht empfohlen, da dies leicht zu einem Deadlock führen kann)

Detaillierte Analyse

Drei Möglichkeiten, den Thread zu beenden

①Verwenden Sie das Flag-Bit, um den Thread zu verlassen.

② Verwenden Sie die Stop-Methode, um den Thread zwangsweise zu beenden.

③Verwenden Sie Interrupt, um den Thread zu beenden

Im Allgemeinen wird der Thread nach der Ausführung der run()-Methode normal beendet. Einige Threads sind jedoch häufig Servo-Threads. Sie müssen eine lange Laufzeit haben, daher müssen sie eine Variable verwenden, um die Schleife zu steuern. Wenn Exit wahr ist, wird die While-Schleife beendet. Es wird ein Java-Schlüssel verwendet. Der Zweck dieses Schlüsselworts besteht darin, den Ausgang zu synchronisieren.

public class ThreadSafe extends Thread {
  public volatile boolean exit = false; 
    public void run() { 
     while (!exit){
     //do something
     }
  } 
}

2 Verwenden Sie die Stop-Methode, um den Thread zwangsweise zu beenden Verwenden Sie thread.stop() direkt im Programm, um das Beenden des Threads zu erzwingen. Die Stop-Methode ist jedoch so, als würde Sie den Computer plötzlich ausschalten, anstatt ihn gemäß dem normalen Verfahren herunterzufahren. Die wichtigsten unsicheren Aspekte sind: Erstellen Sie nach dem Aufruf von thread.stop() einen untergeordneten Thread. Der Thread löst einen ThreadDeatherror-Fehler aus und gibt alle vom untergeordneten Thread gehaltenen Sperren frei.

3. Verwenden Sie Interrupt, um den Thread zu beenden.

Wenn sich der Thread in zwei Zuständen befindet, verwenden Sie Interrpt, um ihn zu beenden Wenn der Thread die Schleife verlässt und dann die Methode interrupt () verwendet, wird das Interrupt-Flag auf true gesetzt, was der Verwendung eines benutzerdefinierten Flags zur Steuerung der Schleife entspricht

public class MyThread extends Thread {
    @Override
    public void run() {
        try {
            for (int i = 0; i < 500000; i++) {
                if (interrupted()) {
                    System.out.println("已经是停止状态了");
                    throw new InterruptedException();//中断异常
                }
                System.out.println("i=" + (i + 1));
            }
            System.out.println("我在for下面");
        } catch (InterruptedException e) {
            System.out.println("进run方法中的catch了!");
            e.printStackTrace();
        }
 
    }
}

(2) Der Thread befindet sich in einem blockierten Zustand : Wenn die Schlafmethode, das Warten auf die Synchronisationssperre und der Empfänger im Socket verwendet werden, akzeptieren und andere Methoden, rufen Sie die Interrupt()-Methode des Threads auf

public class ThreadInterrupt extends Thread {  
    public void run()  {  
        try {  
            sleep(50000);  // 延迟50秒  
        }  
        catch (InterruptedException e) {  
            System.out.println(e.getMessage());  
        }  
    }  
    public static void main(String[] args) throws Exception  {  
        Thread thread = new ThreadInterrupt();  
        thread.start();  
        System.out.println("在50秒之内按任意键中断线程!");  
        System.in.read();  
        thread.interrupt();  
        thread.join();  
        System.out.println("线程已经退出!");  
    }

Das obige ist der detaillierte Inhalt vonMehrere Möglichkeiten zum Beenden von Java-Threads und Analyse von Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen