Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่างรอและสลีปใน Java


รอ () - เธรดเผยแพร่ความเป็นเจ้าของของมอนิเตอร์นี้และรอจนกว่าเธรดอื่นจะแจ้งเธรดที่รอมอนิเตอร์ของอ็อบเจ็กต์นี้เพื่อปลุกขึ้นผ่านการเรียกเมธอด notify() หรือเมธอด notifyAll() จากนั้นเธรดจะรอจนกว่าจะได้สิทธิ์การเป็นเจ้าของจอภาพอีกครั้งและดำเนินการดำเนินการต่อไป

นอนหลับ () - เมธอดนี้ทำให้เธรดที่กำลังดำเนินการอยู่ในโหมดสลีป (หยุดการทำงานชั่วคราว) ตามจำนวนมิลลิวินาทีที่ระบุ เธรดไม่สูญเสียการเป็นเจ้าของจอภาพใดๆ โดยจะส่งเธรดปัจจุบันไปยังสถานะ "ไม่สามารถใช้งานได้" ตามระยะเวลาที่กำหนด

ซีเนียร์ เลขที่ คีย์ รอ นอน
1
Class
Wait() วิธีการเป็นของ Object class
Sleep() วิธีการเป็นของเธรด class
2
ล็อกการปลดล็อก
Wait() ปลดล็อควัตถุ
ไม่ปลดล็อควัตถุ
3
การเรียกบริบท
Wait() สามารถเรียกบนวัตถุเองได้
Sleep() สามารถเรียกบน thread
4.
เงื่อนไขการปลุก
จนกว่าจะโทรแจ้ง (), notifyAll() จาก object
อย่างน้อยก็หมดเวลาหรือโทรขัดจังหวะ
5
การปลุกที่หลอกลวง
โปรแกรมสามารถปลุกให้ตื่นได้
จะไม่มีการปลุกแบบหลอกๆ

ตัวอย่าง SynchronizedMap

synchronized(lockedObject){
   while(condition == true){
      lockedObject.wait() //releases lockedObject lock
   }
   Thread.sleep(100); //puts current thread on Sleep
}