Sleep():此方法用于将当前线程的执行暂停指定时间(以毫秒为单位)。在这里,线程不会失去其对监视器的所有权并恢复其执行
Wait():该方法在对象类中定义。它告诉调用线程(也称为当前线程)等待,直到另一个线程调用该对象的notify()或notifyAll()方法,该线程等待,直到它重新获得监视器的所有权并恢复执行。
Wait() | Sleep() |
---|---|
Wait()方法属于Object类。 | Sleep()方法属于Thread类。 |
Wait()方法在同步期间释放锁。 | Sleep() 方法在同步期间不会释放对象上的锁。 |
Wait() 只能从同步上下文中调用。 | 无需从同步上下文中调用sleep()。 |
Wait() 不是静态方法。 | Sleep() 是静态方法。 |
Wait() 有三个重载方法:
|
Sleep() 有两个重载方法:
|
公共最终无效等待(长时间超时) | 公共静态无效睡眠(长毫秒)抛出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() 方法之间的相似之处:
- 两者都会使当前线程进入不可运行状态。
- 两者都是本机方法。
以下代码片段用于调用 wait() 和 sleep() 方法:
Java
synchronized(monitor){
while(condition == true)
{
monitor.wait() //releases monitor lock
}
Thread.sleep(100); //puts current thread on Sleep
}
程序:
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
相关用法
- Java wait()和notifyall()的区别用法及代码示例
- Java wait()和notify()的区别用法及代码示例
- Java String compareToIgnoreCase()用法及代码示例
- Java String compareTo()用法及代码示例
- Java String split()用法及代码示例
- Java String length()用法及代码示例
- Java String replace()用法及代码示例
- Java String replaceAll()用法及代码示例
- Java String substring()用法及代码示例
- Java String equals()用法及代码示例
- Java String equalsIgnoreCase()用法及代码示例
- Java String contains()用法及代码示例
- Java String indexOf()用法及代码示例
- Java String trim()用法及代码示例
- Java String charAt()用法及代码示例
- Java String toLowerCase()用法及代码示例
- Java String concat()用法及代码示例
- Java String valueOf()用法及代码示例
- Java String matches()用法及代码示例
- Java String startsWith()用法及代码示例
- Java String endsWith()用法及代码示例
- Java String isEmpty()用法及代码示例
- Java String intern()用法及代码示例
- Java String getBytes()用法及代码示例
注:本文由纯净天空筛选整理自nishanthec19大神的英文原创作品 Difference between wait and sleep in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。