การประชุมเกลียว Java สิ้นสุดลงในสามวิธีต่อไปนี้และอยู่ในสถานะของความตายหลังจากสิ้นสุด
1. วิธี run() หรือ call() ถูกดำเนินการและเธรดจะสิ้นสุดตามปกติ
2. เธรดโยนข้อยกเว้นหรือข้อผิดพลาดที่ไม่ถูกต้อง;
3. เรียกใช้วิธี stop() โดยตรงของเธรดเพื่อจบเธรด
หมายเหตุ: เมื่อเธรดหลักสิ้นสุดลงเธรดอื่น ๆ จะไม่ได้รับผลกระทบใด ๆ และจะไม่จบลงด้วย เมื่อเธรดเด็กเริ่มต้นแล้วจะมีสถานะเดียวกับเธรดหลักและจะไม่ได้รับผลกระทบจากส่วนท้ายของเธรดหลัก
เพื่อที่จะทดสอบว่าเธรดเสียชีวิตได้หรือไม่วิธีการ isAlive() ของวัตถุเธรดสามารถเรียกได้ เมื่อเธรดอยู่ในสามสถานะของการทำงานและการปิดกั้นวิธีการจะกลับมาเป็นจริง เมื่อเธรดอยู่ในสถานะใหม่และสถานะตายวิธีการจะกลับมาเป็นเท็จ
การทดสอบจะดำเนินการใน 1 และ 2 ของสถานการณ์การตายของเธรดดังต่อไปนี้
รหัสของเธรดหลักมีดังนี้:
Public Class Threadtest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น InterruptedException {เธรด t = เธรดใหม่ (ใหม่ runtask ()); T.Start (); ในขณะที่ (จริง) {thread.sleep (1,000); System.out.println ("เธรดหลัก: สถานะเธรดลูกคือ" + t.isalive ()); -การทดสอบ 1: หลังจากที่เธรดสิ้นสุดลงตามปกติ isalive () จะส่งกลับเท็จ
เขียนรหัสการดำเนินการเธรดโดยที่เธรดสิ้นสุดตามปกติ:
คลาสสาธารณะ Runtask ใช้งาน runnable {@Override โมฆะสาธารณะ run () {สำหรับ (int idx = 1; idx <= 10; idx ++) {system.out.println ("subthread: ฉันยังมีชีวิตอยู่"+idx); ลอง {thread.sleep (3000); } catch (interruptedException e) {e.printStackTrace (); - ผลลัพธ์ผลลัพธ์ของสองเธรดมีดังนี้ หลังจากการดำเนินการตามปกติของเธรดเด็กเสร็จสิ้นการใช้ Thread.isAlive() จะกลับมาเป็นเท็จ
เธรดหลัก: สถานะเธรดเด็กเป็นหัวข้อหลักหลัก: สถานะเธรดลูกคือทรูทรีทรีทรู: ฉันยังมีชีวิตอยู่ 8 เธรดหลัก: สถานะเธรดลูกเป็นจริงเธรดหลัก: สถานะเธรดลูกเป็นจริงเธรดหลัก: สถานะเธรดเด็กคือทรูทรีทรีทรูด กระทู้: สถานะเธรดลูกเป็นเท็จเธรดหลัก: สถานะเธรดลูกเป็นเท็จเธรดหลัก: สถานะเธรดลูกเป็นเท็จเธรดหลัก: สถานะเธรดลูกเป็นเท็จเธรดหลัก: เธรดลูกเป็นเท็จเธรดหลัก: เธรดลูกเป็นเท็จเธรดหลัก: สถานะเธรดลูกเท็จ เธรดหลักเท็จ: สถานะเธรดลูกเป็นเธรดหลักเท็จ: สถานะเธรดลูกเป็นเธรดหลักเท็จ: สถานะเธรดลูกเป็นเธรดหลักเท็จ: สถานะเธรดลูกเป็นเท็จเธรดหลัก: สถานะเธรดลูกเป็นเท็จ
การทดสอบ 2: หลังจากเธรดลูกมีข้อยกเว้นแล้ว isalive () ของเธรดจะส่งกลับเท็จ
แก้ไขรหัสของเธรดเด็กและเพิ่มการโยนข้อยกเว้น:
คลาสสาธารณะ Runtask ใช้งาน runnable {@Override โมฆะสาธารณะ run () {สำหรับ (int idx = 1; idx <= 10; idx ++) {system.out.println ("subthread: ฉันยังมีชีวิตอยู่"+idx); ลอง {thread.sleep (3000); } catch (interruptedException e) {e.printStackTrace (); } if (idx == 5) {โยน runtimeException ใหม่ ("ฉันตาย"); -ดำเนินการอีกครั้งและสังเกตผลลัพธ์:
เธรดหลัก: สถานะเธรดลูกเป็นเธรดหลักที่แท้จริง: สถานะเธรดลูกเป็นจริงเธรดหลัก: สถานะเธรดลูกคือทรูทรีทรีทรูท: สถานะเธรดลูกจริงทรัคทรี: สถานะเธรดลูกเป็นจริงเธรดหลัก: สถานะเธรดลูกคือทรีทรีทรูท: สถานะเธรดลูกจริง ฉันตายที่ runtask.run (runtask.java:15) ที่ java.lang.thread.run (thread.java:662) เธรดหลัก: สถานะเธรดเด็กเป็นเธรดหลักที่ผิด:
จะเห็นได้ว่าหลังจากถูกโยนข้อยกเว้นแล้วด้ายลูกจะสิ้นสุดลงโดยตรงและกลายเป็นสถานะ flase;
สรุป
หลังจากที่เธรดสิ้นสุดลงตามปกติหรือเธรดจะมีข้อยกเว้นที่ไม่ถูกต้องเธรดจะตายและฟังก์ชั่น iSalive () จะส่งกลับเท็จ โอเคข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร