我在类对象中有2个方法可以从不同的线程和一个方法调用 - timer事件。我标记了所有3种方法synchronized
。但是现在我遇到了某些事情已经锁定this
的情况(我认为同步位置锁定在当前对象上)并且其中一个synchronized
程序无法继续。如何知道哪个方法已锁定this
?我使用NetBeans
和Java 1.4 JDK
。
调用堆栈看起来不活跃:
答案 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)