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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。