【发布时间】:2014-06-23 13:33:33
【问题描述】:
我想检查类对象的锁。我为此使用Thread.holdsLock(this)。这是正确的方法吗?
我的问题是如何检查对象是否已针对主要方法锁定并检查静态方法的锁定。
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
【问题讨论】:
-
对于普通锁,是的。我同意这种做法。
-
@JosefE。我可以通过使用 t1 和 olc 实例来检查 main 方法中对象的锁定吗?
-
我不明白你在问什么。请澄清。
-
如果没有本地代码,您将无法获得对具有锁的线程的引用。
-
同步块永远不会锁定类或对象。它只防止另一个线程进入在同一个锁上同步的代码块。阅读docs.oracle.com/javase/tutorial/essential/concurrency/…
标签: java multithreading locking sleep synchronized