La réunion de filetage Java se termine de trois manières suivantes, et c'est dans un état de mort après la fin
1. run() ou call() est exécutée et le thread se termine normalement;
2. Le thread lance une exception ou une erreur non approuvée;
3. Appelez directement la méthode stop() du thread pour terminer le thread;
Remarque: Lorsque le thread principal se termine, les autres threads ne sont en aucun cas affectés et ne se termineront pas avec lui. Une fois le thread enfant démarré, il a le même statut que le thread principal et ne sera pas affecté par la fin du thread principal.
Afin de tester si un thread est mort, la méthode isAlive() de l'objet de thread peut être appelée. Lorsque le thread est dans les trois états de l'emploi, de l'exécution et du blocage, la méthode reviendra vrai; Lorsque le thread est dans le nouvel état et à l'état mort, la méthode reviendra fausse.
Les tests sont effectués sur 1 et 2 des situations de mort de fil comme suit.
Le code du thread principal est le suivant:
classe publique threadTest {public static void main (String [] args) lève InterruptedException {thread t = new Thread (new RunTask ()); t.start (); while (true) {Thread.Sleep (1000); System.out.println ("Thread principal: l'état du thread de l'enfant est" + t.isalive ()); }}}Test 1: Une fois le thread se terminant normalement, Isalive () renvoie false
Écrivez le code d'exécution du thread où le thread se termine normalement:
La classe publique RunTask implémente Runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {System.out.println ("subthread: je suis toujours en vie" + idx); essayez {thread.sleep (3000); } catch (InterruptedException e) {e.printStackTrace (); }}}} Les résultats de sortie des deux threads sont les suivants. Une fois l'exécution normale du thread enfant terminé, l'utilisation Thread.isAlive() reviendra false.
L'état du thread de l'enfant est vrai État de filetage de filetage de filetage de filetage de filetage de l'enfant est faux Faux Faux principaux: l'état du thread de l'enfant est un faux thread principal: l'état du thread de l'enfant est un faux thread principal: l'état du thread de l'enfant est un faux thread principal: l'état du thread de l'enfant est faux thread principal: l'état du thread de l'enfant est faux
Test 2: Une fois que le fil d'enfant a lancé une exception, le thread Isalive () renvoie false
Modifiez le code du thread enfant et ajoutez des lancers d'exception:
La classe publique RunTask implémente Runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {System.out.println ("subthread: je suis toujours en vie" + idx); essayez {thread.sleep (3000); } catch (InterruptedException e) {e.printStackTrace (); } if (idx == 5) {lancer un nouveau runtimeException ("je suis die"); }}}}Exécuter à nouveau et observer la sortie:
L'état principal du thread de l'enfant est le vrai thread principal: l'état du thread de l'enfant est le vrai thread principal: l'état du thread de l'enfant est le vrai sous-thread: l'état de thread de l'enfant est le vrai sous-thread: l'état de thread de l'enfant est le vrai thread principal: l'état du thread de l'enfant est le vrai sous-thread: l'état du thread de l'enfant est vrai l'état du thread de l'enfant: Child Thread State est vrai thread principal thread Je suis Die sur runtask.run (runtask.java:15) sur java.lang.thread.run (thread.java:662) Thread principal: l'état du thread de l'enfant est un faux thread principal: l'état du thread de l'enfant est un faux thread principal: l'état du thread de l'enfant est faux
On peut voir qu'après l'exception, le thread de l'enfant se termine directement et devient l'état de la ferme;
Résumer
Une fois que le thread se termine normalement, ou que le fil lève une exception non capturée, le fil devient mort et la fonction isalive () renvoie faux. D'accord, ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article sera d'une aide à l'étude ou au travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer.