簡體   English   中英

Java類中的鎖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM