当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java wait和sleep的区别用法及代码示例


Sleep():此方法用于将当前线程的执行暂停指定时间(以毫秒为单位)。在这里,线程不会失去其对监视器的所有权并恢复其执行

Wait():该方法在对象类中定义。它告诉调用线程(也称为当前线程)等待,直到另一个线程调用该对象的notify()或notifyAll()方法,该线程等待,直到它重新获得监视器的所有权并恢复执行。

Wait() Sleep()
Wait()方法属于Object类。 Sleep()方法属于Thread类。
Wait()方法在同步期间释放锁。 Sleep() 方法在同步期间不会释放对象上的锁。
Wait() 只能从同步上下文中调用。 无需从同步上下文中调用sleep()。
Wait() 不是静态方法。 Sleep() 是静态方法。

Wait() 有三个重载方法:

  • wait()
  • wait(long timeout)
  • wait(long timeout, int nanos)

Sleep() 有两个重载方法:

  • sleep(long millis)millis: 毫秒
  • sleep(long millis,int nanos) 纳秒:纳秒
公共最终无效等待(长时间超时) 公共静态无效睡眠(长毫秒)抛出Interrupted_Execption

睡眠方法示例:

synchronized(monitor)
{
Thread.sleep(1000);  Here Lock Is Held By The Current Thread
//after 1000 milliseconds, current thread will wake up, or after we call that is interrupt() method
}

等待方法示例:

synchronized(monitor)
{
monitor.wait()  Here Lock Is Released By Current Thread 
}

wait() 和 sleep() 方法之间的相似之处:

  1. 两者都会使当前线程进入不可运行状态。
  2. 两者都是本机方法。

以下代码片段用于调用 wait() 和 sleep() 方法:

Java


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

Difference-between-wait-and-sleep-in-Java

程序:

Java


// Java program to demonstrate the difference 
// between wait and sleep 
class GfG{
   
private static Object LOCK = new Object();
public static void main(String[] args) 
  throws InterruptedException {
  
    Thread.sleep(1000);
   
    System.out.println("Thread '" + Thread.currentThread().getName() +
      "' is woken after sleeping for 1 second");
  
    synchronized (LOCK) 
    {
        LOCK.wait(1000);
       
        System.out.println("Object '" + LOCK + "' is woken after" +
          " waiting for 1 second");
    }
}
}


输出
Thread 'main' is woken after sleeping for 1 second
Object 'java.lang.Object@1d81eb93' is woken after waiting for 1 second


相关用法


注:本文由纯净天空筛选整理自nishanthec19大神的英文原创作品 Difference between wait and sleep in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。