ในตัวอย่างข้างต้น วิธีการรวมของคลาสเธรดถูกใช้หลายครั้ง ฉันคิดว่าคุณอาจเดาได้ว่าฟังก์ชันของวิธีการเข้าร่วมคืออะไร ใช่ ฟังก์ชั่นของวิธีการรวมคือการเปลี่ยนเธรดการดำเนินการแบบอะซิงโครนัสให้เป็นการดำเนินการแบบซิงโครนัส กล่าวคือ เมื่อมีการเรียกเมธอด start ของอินสแตนซ์เธรด เมธอดนี้จะกลับมาทันที หากคุณต้องการใช้ค่าที่คำนวณโดยเธรดนี้หลังจากเรียกเมธอด start คุณต้องใช้วิธีการรวม หากคุณไม่ได้ใช้วิธีรวม ไม่มีการรับประกันว่าเมื่อมีการดำเนินการคำสั่งที่ตามหลังวิธี start เธรดจะถูกดำเนินการ หลังจากใช้วิธีการรวม โปรแกรมจะไม่ดำเนินการต่อไปจนกว่าเธรดนี้จะออกจากการทำงาน รหัสต่อไปนี้แสดงให้เห็นถึงการใช้การเข้าร่วม
คัดลอกรหัสรหัสดังต่อไปนี้:
ตำนานแพ็คเกจ;
JoinThread คลาสสาธารณะขยายเธรด
-
int สาธารณะคงที่ n = 0;
โมฆะซิงโครไนซ์แบบคงที่ inc ()
-
n++;
-
การรันโมฆะสาธารณะ ()
-
สำหรับ (int i = 0; i < 10; i++)
พยายาม
-
Inc();
sleep(3); // เพื่อให้ผลการรันสุ่มมากขึ้น ให้ดีเลย์ 3 มิลลิวินาที
-
จับ (ยกเว้น e)
-
-
-
โมฆะคงที่สาธารณะ main (String [] args) พ่นข้อยกเว้น
-
เธรดเธรด[] = เธรดใหม่[100];
สำหรับ (int i = 0; i < threads.length; i++) // สร้าง 100 เธรด
เธรด [i] = JoinThread ใหม่ ();
สำหรับ (int i = 0; i < threads.length; i++) // เรียกใช้ 100 เธรดที่เพิ่งสร้างขึ้น
กระทู้[i].เริ่มต้น();
ถ้า (หาค่าความยาว > 0)
สำหรับ (int i = 0; i < threads.length; i++) // ดำเนินการต่อหลังจากดำเนินการครบ 100 เธรดแล้ว
กระทู้[i].เข้าร่วม();
System.out.println("n=" + JoinThread.n);
-
-
ในรูทีน 2-8 จะมีการสร้าง 100 เธรด และแต่ละเธรดจะเพิ่มตัวแปรคงที่ n ขึ้น 10 หาก n เป็นเอาต์พุตหลังจากดำเนินการเธรดทั้งหมด 100 รายการแล้ว ค่า n ควรเป็น 1000
1. ทดสอบ 1
ใช้คำสั่งต่อไปนี้เพื่อรันโปรแกรมด้านบน:
คัดลอกรหัสรหัสดังต่อไปนี้:
java mythread.JoinThread
ผลลัพธ์การรันโปรแกรมมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
n=442
ผลการรันนี้อาจมีความแตกต่างบางประการภายใต้สภาพแวดล้อมการรันที่แตกต่างกัน แต่โดยทั่วไป n จะไม่เท่ากับ 1,000 จากผลลัพธ์ข้างต้น เรามั่นใจได้ว่า n จะไม่ถูกส่งออกมาหลังจากดำเนินการครบ 100 เธรดแล้ว
2. ทดสอบ 2
รันโค้ดด้านบนโดยใช้คำสั่งต่อไปนี้:
มีการรวมพารามิเตอร์ในบรรทัดคำสั่งด้านบน จริงๆ แล้ว พารามิเตอร์ใดๆ สามารถใช้ในบรรทัดคำสั่งได้ ตราบใดที่มีพารามิเตอร์ตัวเดียวที่นี่เพียงเพื่อระบุว่าใช้วิธีการรวมเพื่อซิงโครไนซ์การดำเนินการ 100 กระทู้เหล่านี้
ผลลัพธ์การรันโปรแกรมมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
n=1,000
ไม่ว่าคุณจะรันคำสั่งข้างต้นในสภาพแวดล้อมการทำงานใดก็ตาม คุณจะได้รับผลลัพธ์เดียวกัน: n=1000 สิ่งนี้แสดงให้เห็นอย่างชัดเจนว่าต้องดำเนินการเธรดทั้งหมด 100 เธรด ดังนั้น n จะต้องเท่ากับ 1,000