sleep(): 此方法用于将当前线程的执行暂停指定的时间(以毫秒为单位)。在这里,Thread 不会失去对监视器的所有权并恢复其执行
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: milliseconds,sleep(long millis,int nanos) nanos: Nanoseconds
public final void wait(long timeout) public static void sleep(long millis) throws Interrupted_Execption

sleep()方法示例:

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
}
`

wait()方法示例:

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

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

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

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

synchronized(monitor){
    while(condition == true)
    {
        monitor.wait() //releases monitor lock
    }

    Thread.sleep(100); //puts current thread on Sleep
}

示例2:

// 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");
    }
}
}

Java wait()和sleep()的区别

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java wait()和sleep()的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-wait-and-sleep-in-java.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。