Wait () และแจ้งเตือน () มีส่วนเกี่ยวข้องโดยตรงกับคลาสวัตถุนั่นคือวัตถุทั้งหมดมีวิธีนี้ ดูเหมือนว่านี่เป็นสิ่งที่เหลือเชื่อมากในตอนแรก แต่จริง ๆ แล้วมันเป็นธรรมชาติมากเพราะวิธีการนี้จำเป็นต้องปล่อยล็อคที่ถูกครอบครองเมื่อบล็อกและล็อคมีอยู่ในวัตถุใด ๆ ทำให้เกิดการปิดกั้นด้ายและล็อคบนวัตถุจะถูกปล่อยออกมา วิธีการแจ้งเตือน () การเรียกวัตถุใด ๆ ทำให้บล็อกบล็อกที่เลือกแบบสุ่มในเธรดที่ถูกขัดขวางโดยวิธีการรอ () ของวัตถุ (แต่สามารถดำเนินการได้จนกว่าจะถูกล็อค)
ประการที่สองการรอคอย () และการแจ้งเตือน () สามารถเรียกได้ว่าทุกตำแหน่ง แต่ต้องเรียกว่าคู่นี้ในวิธีการที่ซิงโครไนซ์หรือบล็อก ในทำนองเดียวกันการล็อคบนวัตถุของวิธีการนี้จะต้องเป็นเจ้าของโดยเธรดปัจจุบันเพื่อให้สามารถปล่อยล็อคได้ ดังนั้นการเรียกใช้วิธีการในวิธีการที่ซิงโครไนซ์หรือบล็อก หากเงื่อนไขนี้ไม่เป็นไปตามแม้ว่าโปรแกรมจะยังคงสามารถรวบรวมได้ แต่การผิดกฎหมาย rellegalMonitorsStateException จะปรากฏขึ้นในระหว่างการรันไทม์
คุณลักษณะข้างต้นของวิธีการรอ () และการแจ้งเตือน () กำหนดว่าพวกเขามักจะใช้กับวิธีการที่ซิงโครไนซ์หรือบล็อก วิธีการหรือบล็อกให้วิธีการหรือบล็อกให้วิธีการหรือบล็อก วิธีการทั้งหมดประกาศซิงโครไนซ์) การรวมกันของพวกเขาช่วยให้เราสามารถตระหนักถึงชุดของอัลกอริทึมการสื่อสารระหว่างกันที่ยอดเยี่ยม (เช่นอัลกอริทึมปริมาณสัญญาณ) ในระบบปฏิบัติการและใช้เพื่อแก้ปัญหาการสื่อสารระหว่างเธรดที่ซับซ้อน
เกี่ยวกับวิธีการรอ () และการแจ้งเตือน () ในที่สุดก็อธิบายสองจุด:
ครั้งแรก: เรียกวิธีการแจ้งเตือน () ที่ทำให้เธรดการบล็อกถูกเลือกแบบสุ่มจากเธรดที่ถูกขัดขวางโดยวิธีการรอ () ที่เรียกว่าวัตถุ
ประการที่สอง: นอกเหนือจากการแจ้งเตือน () นอกจากนี้ยังมีวิธีการแจ้งเตือน () ที่สามารถมีบทบาทที่คล้ายกันได้ ไปยังวัตถุ แน่นอนเฉพาะเธรดที่ได้รับการล็อคเท่านั้นที่สามารถเข้าสู่สถานะการทำงานได้
การรอคอยที่เกี่ยวข้องและแจ้งการใช้การสาธิต:
/** * <pre> * วงจรย่อย -เธรด 10 ครั้งจากนั้นวงจรเธรดหลัก 100 ครั้งจากนั้นกลับไปที่วงจรย่อย -เธรด 10 ครั้ง * จากนั้นกลับไปที่วงจรเธรดหลัก 100 ครั้งดังนั้น 50 ครั้ง * </ presle> * @author ketqi */ คลาสสาธารณะ Waitnotifydemo {โมฆะคงที่สาธารณะ (สตริง [] args) {ธุรกิจขั้นสุดท้ายธุรกิจ = ธุรกิจใหม่ (); {สำหรับ (int i = 1; i <= 50; i ++) {businesss.sub (i);}}}) {Business.min (i);}}} ธุรกิจคลาส {บูลีนส่วนตัว ismainthread = true; E.printStackTrace ();}} สำหรับ (int j = 1; j <= 10; j ++) {system.out.println ("ลำดับย่อย -เธรดของ" + j + ", ลูปของ" + i); } ismainthread = false; notify ();} portlic synchronized main main (int i) {ในขณะที่ (ismainthread) {ลอง {this.wait ();} catch (interruptedException e) int j = 1; }}ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้