นี่เป็นคำถามที่ง่ายมากเพราะทั้งสองวิธีนี้มีการใช้ที่แตกต่างกันโดยสิ้นเชิง
ข้อแตกต่างที่สำคัญคือการรอการปลดล็อคหรือจอภาพในขณะที่ sleep ไม่ได้ทำการปลดล็อคหรือมอนิเตอร์ใด ๆ ในขณะที่รอ รอใช้สำหรับการสื่อสารระหว่างเธรดในขณะที่ใช้โหมดสลีปเพื่อหยุดการทำงานชั่วคราว
นี่เป็นเพียงคำอธิบายที่ชัดเจนและพื้นฐานถ้าคุณต้องการมากกว่านั้นอ่านต่อ
ในกรณีที่wait()
เมธอดเธรดอยู่ในสถานะรอและจะไม่กลับมาโดยอัตโนมัติจนกว่าเราจะเรียกnotify()
เมธอด (หรือnotifyAll()
ถ้าคุณมีมากกว่าหนึ่งเธรดในสถานะรอและคุณต้องการปลุกเธรดเหล่านั้นทั้งหมด) และคุณต้องซิงโครไนซ์หรือล็อควัตถุหรือล็อคคลาสเพื่อเข้าถึงwait()
หรือnotify()
หรือnotifyAll()
วิธีการ และอีกสิ่งหนึ่งwait()
วิธีนี้ใช้สำหรับการสื่อสารระหว่างเธรดเนื่องจากถ้าเธรดเข้าสู่สถานะรอคุณจะต้องใช้เธรดอื่นเพื่อปลุกเธรดนั้น
แต่ในกรณีsleep()
นี้เป็นวิธีการที่ใช้ในการพักกระบวนการสักสองสามวินาทีหรือเวลาที่คุณต้องการ เพราะคุณไม่จำเป็นต้องยั่วยุใด ๆnotify()
หรือnotifyAll()
วิธีการเพื่อให้ได้ด้ายที่กลับมา หรือคุณไม่ต้องการเธรดอื่นเพื่อโทรกลับเธรดนั้น เช่นถ้าคุณต้องการบางสิ่งบางอย่างจะเกิดขึ้นหลังจากไม่กี่วินาทีเช่นในเกมหลังจากที่ผู้ใช้เปิดคุณต้องการให้ผู้ใช้รอจนกว่าคอมพิวเตอร์จะเล่นแล้วคุณสามารถพูดถึงsleep()
วิธีการ
และอีกหนึ่งความแตกต่างที่สำคัญที่มักถูกถามบ่อยๆในการสัมภาษณ์: sleep()
เป็นของThread
ชั้นเรียนและwait()
เป็นของObject
ชั้น
เหล่านี้ล้วนเป็นความแตกต่างระหว่างและsleep()
wait()
และมีความคล้ายคลึงกันระหว่างทั้งสองวิธี: พวกเขาทั้งคู่ได้รับการตรวจสอบคำสั่งดังนั้นคุณต้องลองจับหรือโยนเพื่อเข้าถึงวิธีการเหล่านี้
ฉันหวังว่านี่จะช่วยคุณได้