Javaでは、ロックが保持されているかどうかをどのように判断できますか?
Java では、synchronized キーワードでオブジェクトへのロックを実現できます。ロックが保持されているかどうかを判断するには、以下のメソッドを使用します。
- Thread.holdsLock(Object obj)メソッドを使う:このメソッドはThreadクラスの静的メソッドであり、現在スレッドが指定されたオブジェクトのロックを保持しているかどうかを判定する。
Object obj = new Object();
synchronized(obj) {
boolean isHeld = Thread.holdsLock(obj);
System.out.println("锁是否被持有:" + isHeld);
}
- ロックインターフェースの実装クラス(例: ReentrantLock)のisHeldByCurrentThread()メソッドを使用:ロックにロックインターフェースの実装クラスを使用すると、このメソッドを使用して現在スレッドがロックを保持しているかどうかを判定できます。例:
Lock lock = new ReentrantLock();
lock.lock();
try {
boolean isHeld = lock.isHeldByCurrentThread();
System.out.println("锁是否被持有:" + isHeld);
} finally {
lock.unlock();
}
synchronizedキーワードでオブジェクトをロックしているときはロックが保持されているかどうかを直接判定することはできないことに注意してください。ロックが保持されているかどうかを判定する方法としてはロックを獲得しようとする方法があり、たとえばsynchronizedキーワードのtryLock()メソッドやLockインタフェースのtryLock()メソッドでロックの獲得を試みて獲得に成功すればロックが保持されていることになります。