Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要知道谁锁定了对象_Java_Multithreading_Netbeans - Fatal编程技术网

Java 要知道谁锁定了对象

Java 要知道谁锁定了对象,java,multithreading,netbeans,Java,Multithreading,Netbeans,我在类对象中有两个方法,可以从不同的线程调用,还有一个方法-计时器事件。我标记了所有3种方法synchronized。但现在我遇到了这样一种情况:某个东西锁定了这个(我想synchronized会锁定当前对象),并且其中一个同步的过程无法继续。如何知道哪个方法锁定了此?我正在使用NetBeans和java1.4jdk 调用堆栈看起来不活动: 尝试查看哪些线程阻塞了其他线程 Java没有内置的方法来知道阻止同步代码的确切线程 但是我看不出知道阻塞线程有什么好处。使用同步块并传递它,而不是使用同步方

我在类对象中有两个方法,可以从不同的线程调用,还有一个方法-计时器事件。我标记了所有3种方法
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");
}