[英]Locks in java class
假設我們有以下示例代碼:
while(some condition){
lock1.lock();
.
.
}
問題是:
假設while循環的條件正在該代碼部分上運行的某個線程退出,並且lock1可用,則該線程是否有可能檢查循環的條件但仍無法獲得鎖定?
還是在這種情況下可以保證如果條件被檢查,線程將獲得鎖?
簡而言之:是的,有可能。
如果另一個線程已經獲取了該鎖,那么您的線程將被迫等待釋放。
請記住,您無法知道兩個或多個同時執行的線程如何交錯執行它們的指令。 假設有兩個線程A和B執行此代碼。 如果線程A發現條件為true, 則有可能在實際獲取鎖之前(即,在評估while條件和對lock()
的調用之間) 搶占了它 (由OS調度程序從CPU奪走了它 ),因此線程B也找到條件為真,拿起鎖,線程A處於等待狀態。
您不應將鎖基於其他線程可以修改的條件,因為這種條件可能會影響鎖中的代碼。 無法保證在您獲得鎖之前條件不會改變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.