要知道谁锁定了对象

时间:2016-03-02 09:23:06

标签: java multithreading netbeans

我在类对象中有2个方法可以从不同的线程和一个方法调用 - timer事件。我标记了所有3种方法synchronized。但是现在我遇到了某些事情已经锁定this的情况(我认为同步位置锁定在当前对象上)并且其中一个synchronized程序无法继续。如何知道哪个方法已锁定this?我使用NetBeansJava 1.4 JDK

调用堆栈看起来不活跃:

enter image description here

4 个答案:

答案 0 :(得分:0)

尝试jconsole utility查看哪个线程阻止其他线程。

答案 1 :(得分:0)

Java没有内置的方法来知道阻塞同步代码的确切线程。

但是我知道阻塞线程没有任何好处。

答案 2 :(得分:0)

而不是使用synchronized方法,使用synchronized块并传递它,如下所示。并且您将了解哪种方法锁定了它。 另外,如果你的jre超过1.5,我建议使用java Concurrency的Lock接口,否则按照下面提到的方法。快乐的编码:)

method1() {
sysout("method1, going to lock");
synchronized(this) 
{
....
....
}
sysout("method1, going to unlock");
}


method2() {
sysout("method2, going to lock");
synchronized(this)
{
....
...
}
sysout("method2, going to un lock");
}

答案 3 :(得分:0)

获取线程转储以随时获取线程状态和锁定状态。

要在Unix / Linux上进行转储,请使用kill -3 <pid>

快速参考以了解线程转储:Using Thread Dumps