簡體   English   中英

以編程方式檢查是否授予鎖定?

[英]Checking programmatically whether lock is granted?

就像在wait()方法中,如果未在調用對象(對於wait())上授予鎖(例如通過同步調用對象),則拋出IllegalMonitorStateException。

我想知道

像wait()方法一樣,我們可以通過編寫一些代碼來確保授予鎖嗎? 還是僅由JVM完成?

寫吧:

synchronized (thing) {
    thing.wait ();
}

如果尚未鎖定,它將被鎖定;如果已經鎖定,則可以。

您可以調用Thread.holdsLock()來確定是否持有鎖。 但是,您應該設計代碼,以便知道自己是否有鎖。 您應該能夠靜態確定這一點。

在Java 5之前,notify / wait很有用。如果您使用的是Java 5或更高版本,則使用並發庫可能是一個更好的選擇。

編輯:我指的是concurrent包http://download.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html於2004年加入, http://download.oracle。 com / javase / tutorial / essential / concurrency / highlevel.html之前,它是一個外部並發庫。 http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html

我不知道Java,但是通常的鎖語義是,當您嘗試獲取鎖時,您將阻塞直到獲得它。 這意味着您無需驗證您是否真正獲得了鎖定-當流程進入下一行時,您可以確定自己已被鎖定。 當您開始嘗試使用鎖進行其他操作時,例如嘗試檢查其是否被鎖定,通常是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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