Das Java -Threading -Treffen endet auf den folgenden drei Arten und befindet sich nach dem Ende in einem Zustand des Todes
1. run() oder call() wird ausgeführt und der Thread endet normal;
2. Der Thread löst eine ungewöhnliche Ausnahme oder einen unkausleiten Fehler aus;
3. Rufen Sie direkt die stop() -Methode des Threads auf, um den Thread zu beenden.
HINWEIS: Wenn der Hauptfaden endet, sind andere Threads in keiner Weise betroffen und enden nicht damit. Sobald der untergeordnete Thread begonnen wurde, hat er den gleichen Status wie der Hauptfaden und wird vom Ende des Hauptfadens nicht beeinflusst.
Um zu testen, ob ein Thread gestorben ist, kann die isAlive() -Methode des Thread -Objekts aufgerufen werden. Wenn sich der Thread in den drei Zuständen von Bereit, Laufen und Blockieren befindet, wird die Methode wahr zurückgegeben. Wenn sich der Thread im neuen Zustand und im toten Zustand befindet, wird die Methode falsch zurückgegeben.
Die Tests werden wie folgt auf 1 und 2 der Todessituationen der Gewinde durchgeführt.
Der Code des Haupt -Threads lautet wie folgt:
public class threadTest {public static void main (String [] args) löst InterruptedException aus {Thread t = neuer Thread (neuer RunTask ()); t.start (); while (true) {thread.sleep (1000); System.out.println ("Hauptfache: Child -Thread -Status ist" + t.isalive ()); }}}Test 1: Nachdem der Faden normal endet, gibt ISALIVE () FALSE zurück
Schreiben Sie den Thread -Ausführungscode, bei dem der Thread normal endet:
public class runtask implements runnable {@Override public void run () {für (int idx = 1; idx <= 10; idx ++) {System.out.println ("subthread: Ich bin noch lebendig"+idx); try {thread.sleep (3000); } catch (interruptedException e) {e.printstacktrace (); }}}} Die Ausgangsergebnisse der beiden Threads sind wie folgt. Nach Abschluss der normalen Ausführung des untergeordneten Threads wird mit Thread.isAlive() falsch zurückgegeben.
Main thread: child thread state is true Main thread: child thread state is true Sub-thread: I am still alive 8 Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Sub-thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is false Main Thread: Child Thread Status ist falsch Haupt Thread: Child Thread Status ist falsch Haupt Thread: Child Thread State ist Falsch Haupt Thread: Child Thread Zustand ist Falsch Hauptdhrez Falsches Haupt Thread: Child Thread Status ist falsch Haupt Thread: Child Thread Status ist falsch Haupt Thread: Child Thread Status ist falsch Haupt Thread: Child Thread Status ist falsch Haupt Thread: Child Thread Status ist falsch
Test 2: Nachdem das untergeordnete Thread eine Ausnahme ausgelöst hat, gibt der Thread iSalive () false zurück
Ändern Sie den Code des untergeordneten Threads und fügen Sie Ausnahmeverluste hinzu:
public class runtask implements runnable {@Override public void run () {für (int idx = 1; idx <= 10; idx ++) {System.out.println ("subthread: Ich bin noch lebendig"+idx); try {thread.sleep (3000); } catch (interruptedException e) {e.printstacktrace (); } if (idx == 5) {neue runTimeexception ("Ich bin sterben"); }}}}Erneut ausführen und die Ausgabe beobachten:
Haupt Thread: Child Thread Status ist wahrer Haupt Thread: Child Thread Status ist wahrer Haupt Thread: Child Thread State ist wahrer Sub-Thread: Child Thread Status ist wahrer Sub-Thread: Child Thread State ist wahrer Haupt Thread: Child Thread State ist wahrer Sub-Thread: Child Thread State ist wahrer Sub-Thread. Ich bin sterben bei Runtask.run (Runtask.java:15) unter java.lang.thread.run (Thread.java:662) Haupt Thread: Child Thread Status ist falsch Haupt Thread: Child Thread Status ist falsch Haupt Thread: Child Thread State ist falsch
Es ist ersichtlich, dass nach der Ausnahme der Kinderfaden direkt endet und zum Flasenzustand wird.
Zusammenfassen
Nachdem der Faden normal endet oder der Thread eine ungewandete Ausnahme ausgelegt hat, wird der Faden tot und die Funktion iSalive () gibt falsch zurück. Okay, das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, der Inhalt dieses Artikels wird für das Studium oder die Arbeit aller Hilfe helfen. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen.