[英]what is the behavior of java after returning to a synchronized block after notify on an object
我知道在我們對一個對象調用wait()
,該對象的鎖將釋放以允許另一個線程通過同步塊提供該鎖並調用notify()
。 在我們進入我們調用wait()
方法的同步塊之前,我們獲取鎖並調用wait()
。
但是在wait()
該方法釋放了鎖。
現在我的問題是在另一個線程中調用notify()
之后,等待該對象的線程是否再次獲取鎖。
下面是一個簡單的代碼:
Object obj = new Object();
synchronized (obj) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
afterWait();
}
是jvm執行afterWait()
方法時獲取對象的鎖與否,因為它也在同步塊中。
在 Java 中,監視器是根據 Mess 的語義實現的。 這意味着當當前線程需要等待時,它會釋放監視器並加入其他等待線程以再次獲取監視器。 所寫的示例並不安全,因為 wait 應該在循環中檢查某些條件以再次等待,因為 Java 不保證只有在notify()
或notifyAll()
方法的情況下才會喚醒線程。 它可能適用於您的開發環境,但在另一個環境中失敗。 此外, notify()
方法不保證線程會喚醒並獲得鎖,因為它可能無法獲得信號,因此執行notifyAll()
以喚醒所有等待鎖的線程是安全的。
我是 Stack Overflow 的新手,所以我不確定我的共享知識是否直接針對問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.