Pertemuan Threading Java berakhir dengan tiga cara berikut, dan itu dalam keadaan mati setelah akhir
1. Metode run() atau call() dieksekusi dan utas berakhir secara normal;
2. Thread melempar pengecualian atau kesalahan yang tidak tertutup;
3. Langsung panggil metode stop() dari utas untuk mengakhiri utas;
Catatan: Ketika utas utama berakhir, utas lain tidak terpengaruh dengan cara apa pun dan tidak akan berakhir dengan itu. Setelah utas anak dimulai, ia memiliki status yang sama dengan utas utama dan tidak akan terpengaruh oleh ujung utas utama.
Untuk menguji apakah suatu utas telah mati, metode isAlive() dari objek utas dapat dipanggil. Ketika utas berada di tiga keadaan siap, berjalan, dan memblokir, metode ini akan mengembalikan true; Ketika utas berada dalam keadaan baru dan keadaan mati, metode ini akan mengembalikan false.
Tes dilakukan pada 1 dan 2 situasi kematian utas sebagai berikut.
Kode utas utama adalah sebagai berikut:
Public Class ThreadTest {public static void main (string [] args) melempar interruptedException {thread t = thread baru (runTask baru ()); t.start (); while (true) {thread.sleep (1000); System.out.println ("Utas utama: status utas anak adalah" + t.isalive ()); }}}Tes 1: Setelah utas berakhir secara normal, isAlive () mengembalikan false
Tulis kode eksekusi utas di mana utas berakhir secara normal:
Kelas publik Runtask mengimplementasikan runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {System.out.println ("Subthread: I'm Still Alive"+IDX); coba {thread.sleep (3000); } catch (InterruptedException e) {E.PrintStackTrace (); }}}} Hasil output dari kedua utas tersebut adalah sebagai berikut. Setelah eksekusi normal dari utas anak selesai, menggunakan Thread.isAlive() akan mengembalikan false.
Utas utama: keadaan utas anak adalah utas utama: keadaan utas anak adalah sub-thread sejati: Saya masih hidup 8 utas utama: status utas anak adalah utas utama benar: status utas anak adalah utas utama: keadaan utas anak adalah benar-benar utas utama: utas utas anak adalah utas utama adalah utas utama: status utas anak benar: Thread: Status utas anak adalah false utas utama: status utas anak adalah false utas utama: status utas anak adalah false utas utama: status utas anak adalah false utas utama: status utas anak adalah false utas utama: status utas anak adalah false utas: status utas anak adalah false utas utama: utas utas anak adalah false utas: utas anak adalah status utas anak adalah false utama: False Main Thread: Status utas anak adalah false utas utama: status utas anak adalah false utas utama: status utas anak adalah false utas utama: status utas anak adalah false utas utama: status utas anak adalah false
Tes 2: Setelah utas anak melempar pengecualian, isalive utas () mengembalikan false
Ubah kode utas anak dan tambahkan lemparan pengecualian:
Kelas publik Runtask mengimplementasikan runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {System.out.println ("Subthread: I'm Still Alive"+IDX); coba {thread.sleep (3000); } catch (InterruptedException e) {E.PrintStackTrace (); } if (idx == 5) {lempar runtimeException baru ("I Am Die"); }}}}Jalankan lagi dan amati output:
Utas utama: Keadaan utas anak adalah utas utama: keadaan utas anak adalah utas utama: keadaan utas anak adalah benar sub-utas: keadaan utas anak adalah sub-utas yang sebenarnya: keadaan utas anak adalah utas utama: status utas anak benar-benar sub-thread: utas utas anak adalah status utas benar: utas utas anak adalah utas anak adalah utas utama status anak utama adalah utas utama: thread utama status utas anak adalah benar: utas utas anak adalah status anak. java.lang.runtimeException: Saya mati di runtask.run (runtask.java:15) di java.lang.thread.run (thread.java:662) Thread utama: Negara utas anak adalah false utas utama: status utas anak adalah false thread: status utas anak adalah false adalah false
Dapat dilihat bahwa setelah pengecualian dilemparkan, utas anak berakhir secara langsung dan menjadi keadaan lalat;
Meringkaskan
Setelah utas berakhir secara normal, atau utas melempar pengecualian yang tidak tertutup, utas menjadi mati, dan fungsi isalive () mengembalikan false. Oke, di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini akan membantu untuk belajar atau bekerja semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.