ความแตกต่างระหว่างการนอนหลับและการรอ (พร้อมโต๊ะ)

สารบัญ:

Anonim

Java มีหลายวิธีในการดำเนินการบางอย่าง เมธอดคือกลุ่มของโค้ด ซึ่งทำงานเมื่อมีการเรียกเท่านั้น และอาจส่งคืนผลลัพธ์หรือไม่ก็ได้

วิธีการต่างๆ เช่น สลีปและการรอใช้สำหรับการทำมัลติเธรด ทั้งคู่หยุดชั่วคราวและส่งเธรดไปรอ แต่มีความแตกต่างที่สำคัญในการทำงาน

นอน vs รอ

ความแตกต่างระหว่างเมธอด sleep() และ wait() คือ เมธอด sleep() ใช้ในโปรแกรมเพื่อหยุดการทำงานของเธรดปัจจุบันชั่วคราวในช่วงเวลาหนึ่ง ในขณะที่เมธอด wait() ถูกใช้ในโปรแกรมเพื่อหยุดชั่วคราวหรือระงับ เธรดปัจจุบันจนกว่าจะมีการเรียกใช้เมธอดเฉพาะ

ในระหว่างการใช้วิธีสลีป เธรดปัจจุบันจะไม่สูญเสียการเป็นเจ้าของจอภาพ สลีปเป็นเมธอดแบบสแตติกและเป็นส่วนหนึ่งของคลาสเธรด หลังจากหมดเวลารอ เธรดจะกลับสู่สถานะที่รันได้เดิม ช่วยให้มั่นใจถึงการใช้งาน CPU อย่างสมบูรณ์ในขณะรอ

ในขณะที่เมธอด wait() ใช้ในโปรแกรม Java เพื่อสั่งให้เธรดปัจจุบันรอ จนกว่าจะไม่มีการเรียกใช้เธรดอื่นสำหรับอ็อบเจ็กต์นั้น เธรดจะดำเนินการต่อด้วยการดำเนินการ เมื่อได้รับการควบคุมของจอภาพแล้ว ไม่ใช่วิธีการแบบคงที่ซึ่งแตกต่างจากโหมดสลีปและเป็นส่วนหนึ่งของคลาสอ็อบเจ็กต์

ตารางเปรียบเทียบระหว่างสลีปกับการรอ

พารามิเตอร์ของการเปรียบเทียบ การนอนหลับ รอ
ระดับ วิธีสลีปเป็นส่วนหนึ่งของคลาสเธรด วิธีการรอเป็นส่วนหนึ่งของคลาสอ็อบเจ็กต์
ประเภทของวิธีการ การนอนหลับเป็นวิธีคงที่ การรอไม่ใช่วิธีการแบบคงที่
เทคนิคการโทร วิธีการนอนหลับสามารถเรียกได้จากนอกบริบทที่ซิงโครไนซ์ วิธีการรอสามารถเรียกได้จากบริบทที่ซิงโครไนซ์เท่านั้น
ปลดล็อค วิธีสลีปไม่ปลดล็อกวัตถุ สำหรับการหมดเวลาที่ระบุ ระหว่างการซิงโครไนซ์ เมธอด wait ปลดล็อคบนอ็อบเจ็กต์เพื่อให้มีโอกาสดำเนินการ ระหว่างการซิงโครไนซ์
ประกาศ โมฆะคงที่สาธารณะสลีป () โมฆะสุดท้ายสาธารณะ รอ()

การนอนหลับคืออะไร?

เธรดสลีป () เป็นเมธอดแบบคงที่ในโปรแกรม Java ซึ่งระงับเธรดปัจจุบันและทำให้อยู่ในสถานะรอตามระยะเวลาที่กำหนด เมื่อสถานะรอและเวลาหมดลง เงื่อนไขของเธรดจะเปลี่ยนเป็นสถานะที่รันได้ จากนั้นรอให้ CPU ดำเนินการต่อไป

จุดประสงค์ของวิธีนี้คือสร้างการหน่วงเวลาสองสามวินาทีในโปรแกรมและใช้ประโยชน์สูงสุดของ CPU ไปพร้อม ๆ กัน หากระบบไม่ว่างหรือโอเวอร์โหลด เวลารอหรือหยุดชั่วคราวจะมากขึ้น มิฉะนั้น จะใช้เวลาน้อยกว่าหรือเท่ากับเวลาจริง

ประเภทการส่งคืนของวิธีการสลีปสามารถกล่าวได้ว่าเป็นโมฆะ เนื่องจากจะไม่คืนค่าใดๆ เธรดสลีปไม่ทำให้มอนิเตอร์สูญหายหรือล็อคเธรดที่ได้รับไปแล้ว หากในกรณีใด ๆ การนอนหลับถูกรบกวน เธรดจะส่ง Interrupted_Exception ระยะเวลาจริงที่เธรดจะเข้าสู่โหมดสลีปมักจะขึ้นอยู่กับตัวกำหนดเวลาและตัวจับเวลาระบบซึ่งเป็นส่วนหนึ่งของระบบปฏิบัติการ

ไวยากรณ์ของวิธีสลีปคือ – public static void sleep (มิลลิวินาทีนาน)

โมฆะสลีปสาธารณะ (มิลลิวินาทียาว int นาโนวินาที)

มิลลิวินาทีและนาโนวินาทีในที่นี้คือเวลาที่เธรดจะเข้าสู่โหมดสลีป

รอคืออะไร

Wait() เป็นวิธีการที่ใช้สำหรับการสื่อสารระหว่างเธรด เมื่อใดก็ตามที่ใช้เธรด wait() การเรียกหรือเธรดปัจจุบันจะหยุดชั่วคราวและระงับ จนกว่าจะมีการเรียกใช้เมธอด เช่น notify() หรือ notifyAll() ในระบบ

notify() วิธีการจะปลุกเธรดที่ระบุในขณะที่ notifyAll() ใช้ได้กับทุกเธรด เมื่อซิงโครไนซ์แล้ว เมธอด wait จะปลดล็อกทรัพยากร ไม่มีค่าส่งคืนของวิธี Wait ดังนั้นจึงอาจกล่าวได้ว่าคืนค่าเป็นโมฆะ

ข้อยกเว้นสองประการของวิธีการรอคือ Interrupted_Exception (เมื่อเธรดปัจจุบันถูกขัดจังหวะระหว่างโหมดสลีป) และ IllegalMonitorStateException (เมื่อเธรดปัจจุบันไม่ใช่เจ้าของวัตถุบนจอภาพ)

เมธอด Wait เป็นส่วนหนึ่งของคลาสอ็อบเจ็กต์ วิธีการนี้ใช้ได้เท่านั้นและสามารถเรียกผ่านบล็อกที่ซิงโครไนซ์ได้ วิธีการรอจะกำหนดหน้าจอที่ถูกระงับหรือล็อคไว้ว่างในระหว่างการซิงโครไนซ์ และเมธอด Wait จะอนุญาตให้เธรดหลายเธรดที่ซิงโครไนซ์เข้าถึงอ็อบเจ็กต์เดียวกันทีละรายการเท่านั้น

ไวยากรณ์ของเมธอด Wait คือ – public final void wait()

ความแตกต่างหลักระหว่างการนอนหลับกับการรอ

บทสรุป

วิธี Sleep and Wait เป็นวิธีการดั้งเดิมของ Java และทั้งสองถูกใช้อย่างกว้างขวางเพื่อทำให้เธรดที่กำลังดำเนินอยู่เข้าสู่สภาวะที่ไม่สามารถรันได้ ทั้งสองวิธีนี้ใช้สำหรับการทำมัลติเธรดในโปรแกรม

วิธีสลีปให้ตัวเลือกพิเศษในการล็อกหน้าจอตามระยะเวลาที่กำหนด ซึ่งโดยปกติแล้วจะใช้เวลาตั้งแต่นาโนวินาทีถึงมิลลิวินาที แต่วิธีการรอจะล็อกหรือระงับหน้าจอจนกว่าจะมีการเรียกใช้วิธีอื่น ดังนั้นระยะเวลาจึงไม่มีความเฉพาะเจาะจงเท่ากับระหว่างการใช้วิธีสลีป

พวกเขาแยกความแตกต่างจากกันในแง่ของการทำงานเฉพาะ เช่น คลาส เมธอด การซิงโครไนซ์ และระยะเวลาของการล็อกและปลดล็อก และพารามิเตอร์อื่นๆ บ่อยครั้งที่โปรแกรมเมอร์สับสนว่าวิธีใดเหมาะสำหรับการนอนหลับของเธรด การใช้วิธีการขึ้นอยู่กับข้อกำหนด เช่น ความจำเป็น ความเร่งด่วน และระยะเวลาของเธรดปัจจุบัน

ความแตกต่างระหว่างการนอนหลับและการรอ (พร้อมโต๊ะ)