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
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。