"สวัสดี Amigo! ฉันเห็นว่าคุณกำลังก้าวหน้าอย่างมากในการเรียนรู้เกี่ยวกับเธรด"
"มันไม่ยากเลย"
เยี่ยมมาก! วันนี้คุณมีบทเรียนง่าย ๆ และหัวข้อคือวิธีการเข้าร่วม
ลองนึกภาพสถานการณ์ต่อไปนี้: เธรดหลักได้สร้างเธรดย่อยเพื่อดำเนินการบางอย่าง เวลาผ่านไป และตอนนี้เธรดหลักต้องการผลลัพธ์ของงานที่ดำเนินการโดยเธรดย่อย แต่เธรดลูกยังทำงานไม่เสร็จ เธรดหลักควรทำอย่างไร
คำถามที่ดี. เธรดหลักควรทำอย่างไร
"นี่คือ วิธีการ เข้าร่วมมันช่วยให้เราสามารถรอหนึ่งเธรดในขณะที่อีกเธรดทำงานเสร็จ:"
รหัส | คำอธิบาย |
---|---|
|
คลาสที่ใช้อินเทอร์เฟซที่รันได้ |
|
เธรดหลัก สร้างเธรดย่อย – thread1
จากนั้นจะเริ่มโดยการเรียกthread1 .start(); จากนั้นรอให้เสร็จสิ้น – thread1.join(); |
หนึ่งเธรดสามารถเรียก วิธี การเข้าร่วมบนวัตถุเธรดของเธรดที่สอง เป็นผลให้เธรดแรก (ซึ่งเรียกว่าเมธอด) หยุดทำงานจนกว่าเธรดที่สอง (ซึ่งเรียกเมธอดการรวมของอ็อบเจกต์) จะเสร็จสิ้น
เราจำเป็นต้องแยกความแตกต่างระหว่างสองสิ่งนี้: เรามีเธรด (สภาพแวดล้อมการดำเนินการที่แยกต่างหาก) และเรามีวัตถุเธรด
"แค่นั้นแหละ?"
"ใช่."
"แต่ทำไมเราต้องสร้างเธรดแล้วรอให้เสร็จทันที"
"อาจไม่จำเป็นต้องทำทันที อาจเป็นหลังจากเวลาผ่านไป หลังจากเริ่มเธรดลูกชุดแรก เธรดหลักสามารถมอบหมายงานเพิ่มเติมให้กับเธรดอื่น ๆ (โดยการสร้างและเรียกใช้ เมธอด start ) จากนั้นเมื่อมัน ไม่มีงานเหลือ ต้องประมวลผลผลลัพธ์ของเธรดลูกแรก เมื่อใดก็ตามที่คุณต้องการรอให้เธรดอื่นทำงานให้เสร็จ คุณต้องเรียกเมธอดเข้าร่วม "
"เข้าใจแล้ว."
GO TO FULL VERSION