ดูเหมือนว่าตัวนับการนับถอยหลังเรียกวิธีการนับถอยหลังของวัตถุ Countdownlatch ลบตัวนับด้วย 1 เมื่อถึง 0 บริกรทั้งหมดเริ่มดำเนินการ
java.util.concurrent.countdownlaatch
คลาสเสริมแบบซิงโครนัสก่อนที่จะเสร็จสิ้นชุดการดำเนินการในเธรดอื่น ๆ จะช่วยให้สามารถรอหนึ่งเธรดได้หรือมากกว่า ใช้จำนวนที่กำหนดเพื่อเริ่มต้นนับถอยหลัง เนื่องจากวิธีการนับถอยหลัง () ถูกเรียกใช้วิธีการรอคอยถูกบล็อกก่อนที่การนับปัจจุบันจะถึงศูนย์ หลังจากนั้นเธรดที่รอทั้งหมดจะได้รับการปล่อยตัวและการโทรที่ตามมาทั้งหมดของการรอคอยจะกลับมาทันที ปรากฏการณ์นี้ปรากฏขึ้นเพียงครั้งเดียว -ไม่สามารถรีเซ็ตได้ หากคุณต้องการรีเซ็ตการนับให้พิจารณาใช้ CyclicBarrier
Countdownlatch เป็นเครื่องมือการซิงโครไนซ์ทั่วไปซึ่งมีการใช้งานมากมาย ใช้การนับจำนวน 1 countownlatch ที่เริ่มต้นเป็นผู้ฝากเปิด/ล็อคอย่างง่ายหรือทางเข้า: ก่อนที่จะเปิดทางเข้าโดยเรียกเธรดการนับถอยหลัง () เธรดเธรดทั้งหมดที่รอคอยรออยู่ที่ทางเข้า ใช้ N ชื่อย่อ n ของ Countdownlatch สามารถรอเธรดเพื่อรอก่อนที่เธรด N จะเสร็จสมบูรณ์หรือรอให้รอก่อนการดำเนินการที่แน่นอน
หนึ่งในคุณสมบัติที่มีประโยชน์ของ Countdownlatch คือไม่จำเป็นต้องใช้เธรดที่เรียกวิธีการนับถอยหลังเพื่อดำเนินการต่อไปจนกว่าจะนับเป็นศูนย์และก่อนที่เธรดทั้งหมดจะผ่านได้
ตัวอย่าง: นักกีฬาหลายคนกำลังรอคำสั่งผู้ตัดสิน: นักกีฬาทุกคนเช่นผู้ตัดสินและนักกีฬาคนอื่น ๆ ปล่อยผลลัพธ์หลังจาก Qi Qi
แพ็คเกจ com.ljq.test.thread; นำเข้า java.util.concurrent.countdownlaatch; .NEWCACHEDTHREADPOOL (); ผู้ตัดสินประกาศผลลัพธ์ของผลลัพธ์ raun () {ลอง {system.out.println ("เธรด" + thread.currentthread (). getName () + "กำลังเตรียมที่จะยอมรับคำสั่ง"); + thread.currentthread () +"ผลลัพธ์การประมวลผลคำสั่งตอบกลับ") ;;} catch (Exception E) {E.PrintStackTrace ();}}; .RANDOM ()*10,000)); คำสั่ง system.out.println ("เธรด" + thread.currentthread (). getName () + "ได้ส่งคำสั่งรอผลลัพธ์"); 0 นักกีฬาทั้งหมดในสถานที่ System.out.println ("เธรด" + เธรด. currentthread (). getName () + "ได้รับผลการตอบกลับทั้งหมด"););} service.shutdown ();}}กลับผลลัพธ์:
เธรดพูล-เธรด-3 กำลังเตรียมที่จะยอมรับคำสั่งเธรดคำสั่ง pool-1-thread-กำลังเตรียมที่จะยอมรับคำสั่งเธรดพูล-เธรด -2 กำลังเตรียมที่จะยอมรับเธรดคำสั่งหลักจะส่งเธรดคำสั่ง Main ได้ส่ง คำสั่งรอผลลัพธ์กำลังรอผลลัพธ์เธรดผลลัพธ์พูล-เธรด -2 ได้รับการยอมรับเธรดคำสั่ง pool-thread-1 pool-1-thread-3 ได้ยอมรับเธรดคำสั่ง pool-thread-3 ถึง ตอบสนองต่อคำสั่งการประมวลผลผลลัพธ์เธรดพูล -1- การตอบสนองของเธรด -2 ต่อคำสั่งการประมวลผลผลลัพธ์เธรดพูล -1-Thread-1 คำสั่งการประมวลผลคำสั่งการประมวลผลคำสั่งหลักได้รับผลการตอบกลับทั้งหมด