[英]Check the Lock on an object in java
我想檢查該類對象上的鎖。 我Thread.holdsLock(this)
使用Thread.holdsLock(this)
。 這是正確的方法嗎?
我的問題是我如何才能檢查對象是否為main方法鎖定,以及如何檢查靜態方法的鎖定。
public class CheckLock {
public static void main(String[] args) throws InterruptedException {
objectLockClass olc= new objectLockClass();
Thread t1=new Thread(olc);
t1.start();
}
}
class objectLockClass implements Runnable {
@Override
public void run() {
boolean isLocked = true;
int counter=0;
synchronized (this) {
while (isLocked) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("lock object in run : " + Thread.holdsLock(this));
if (counter==5 ) isLocked=false;
counter++;
}
}
輸出為:
lock object in run : true
lock object in run : true
lock object in run : true
lock object in run : true
lock object in run : true
lock object in run : true
如何檢查對象的main方法是否已鎖定,以及如何檢查靜態方法的鎖定?
沒有為方法鎖定對象。 它只是被鎖住了。 期。 Java的synchronized
關鍵字的實用程序是,永遠不允許兩個線程同時在同一個對象上進行同步。
詢問其他線程是否已鎖定對象通常沒有任何意義。 Thread.holdsLock(foo)
方法不會告訴您:它僅告訴調用線程是否已將foo鎖定。 假設有一個方法, Thread.otherThreadHoldsLock(foo)
,並假設你稱它是這樣的:
Object foo = ...;
if (Thread.otherThreadHasLocked(foo)) {
doSomething();
} else {
doSomethingElse();
}
它沒有提供任何有用的信息:此代碼可以在foo鎖定或foo不鎖定的情況下調用doSomething(); 並且可以在foo鎖定或foo未鎖定的情況下調用doSomethingElse()。 不能保證,因為另一個線程可以隨時獲取鎖或釋放鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.