Java 要知道谁锁定了对象
我在类对象中有两个方法,可以从不同的线程调用,还有一个方法-计时器事件。我标记了所有3种方法Java 要知道谁锁定了对象,java,multithreading,netbeans,Java,Multithreading,Netbeans,我在类对象中有两个方法,可以从不同的线程调用,还有一个方法-计时器事件。我标记了所有3种方法synchronized。但现在我遇到了这样一种情况:某个东西锁定了这个(我想synchronized会锁定当前对象),并且其中一个同步的过程无法继续。如何知道哪个方法锁定了此?我正在使用NetBeans和java1.4jdk 调用堆栈看起来不活动: 尝试查看哪些线程阻塞了其他线程 Java没有内置的方法来知道阻止同步代码的确切线程 但是我看不出知道阻塞线程有什么好处。使用同步块并传递它,而不是使用同步方
synchronized
。但现在我遇到了这样一种情况:某个东西锁定了这个
(我想synchronized会锁定当前对象),并且其中一个同步的
过程无法继续。如何知道哪个方法锁定了此?我正在使用NetBeans
和java1.4jdk
调用堆栈看起来不活动:
尝试查看哪些线程阻塞了其他线程 Java没有内置的方法来知道阻止同步代码的确切线程
但是我看不出知道阻塞线程有什么好处。使用同步块并传递它,而不是使用同步方法,如下所示。您可以知道哪个方法锁定了它。 此外,如果您的jre超过1.5,我建议使用java并发锁接口,否则请遵循下面提到的方法。快乐编码:)
执行线程转储以随时获取线程状态和锁定状态 要在Unix/Linux上转储,请使用
kill-3
了解线程转储的快速参考:如果您想将同步分解为更小的部分,请为每个方法提供自己的锁,这样当一个方法被锁定时,它不会锁定所有其他方法。我希望所有3个方法迟早都会完成,并允许继续下一个同步方法,我对这一性能感到满意。我不明白为什么这些方法中有一种没有完成。至少我需要知道哪种方法可以锁定所有内容。
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");
}