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

ความแตกต่างระหว่างวิธี wait() และ sleep() ใน Java?


วิธีการ sleep() เป็น คงที่ วิธีการ กระทู้ คลาสและสามารถส่งเธรดที่กำลังทำงานอยู่ในสถานะ "Non-Runnable" ได้ ในขณะที่รอ() เมธอดเป็นเมธอดอินสแตนซ์ เรากำลังเรียกมันโดยใช้เธรดอ็อบเจ็กต์ และจะมีผลกับอ็อบเจกต์นั้นเท่านั้น นอนหลับ() เมธอด wakeup หลังจากหมดเวลาหรือเรียก interrupt() เมธอด ในขณะที่ รอ() เมธอด wakeup หลังจากหมดเวลาหรือโทร notify() หรือ notifyAll() กระบวนการ. นอนหลับ() เมธอดไม่ปล่อยล็อกหรือตรวจสอบ r ขณะรอ ในขณะที่ รอ() เมธอดจะปลดล็อคหรือมอนิเตอร์ขณะรอ

Syntax for sleep() method

public static void sleep(long millis) throws InterruptedException

ไวยากรณ์สำหรับเมธอด wait()

public final void wait() throws InterruptedException

ตัวอย่าง

public class ThreadTest implements Runnable {
   private int number = 10;
   public void methodOne() throws Exception {
      synchronized(this) {
         number += 50;
         System.out.println("Number in methodOne(): " + number);
      }
   }
   public void methodTwo() throws Exception {
      synchronized(this) {
         Thread.sleep(2000); // calling sleep() method 
         this.wait(1000); // calling wait() method
         number *= 75;
         System.out.println("Number in methodTwo(): " + number);
      }
   }
   public void run() {
      try {
         methodOne();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void main(String[] args) throws Exception {
      ThreadTest threadTest = new ThreadTest();
      Thread thread = new Thread(threadTest);
      thread.start();
      threadTest.methodTwo();
   }
}

ผลลัพธ์

Number in methodOne(): 60
Number in methodTwo(): 4500