Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 VirtualMachine.getSystemProperties()死锁_Java_Api_Jvm_Deadlock - Fatal编程技术网

java VirtualMachine.getSystemProperties()死锁

java VirtualMachine.getSystemProperties()死锁,java,api,jvm,deadlock,Java,Api,Jvm,Deadlock,我正在使用JavaAttachAPI连接到本地JVM。我正在做下面的事情 VirtualMachine vm = VirtualMachine.attach("8400"); Properties props = vm.getSystemProperties(); 在windows计算机上运行时,如果我连接的虚拟机在attach和getSystemProperties调用之间关闭,getSystemProperties()将永远阻塞并在该线程中创建死锁。我已经跟踪到了WindowsVirtua

我正在使用JavaAttachAPI连接到本地JVM。我正在做下面的事情

VirtualMachine vm = VirtualMachine.attach("8400");
Properties props = vm.getSystemProperties();

在windows计算机上运行时,如果我连接的虚拟机在attach和getSystemProperties调用之间关闭,
getSystemProperties()
将永远阻塞并在该线程中创建死锁。我已经跟踪到了
WindowsVirtualMachine.connectPipe()
。它是本机方法,因此在WindowsVirtualMachine.c connectPipe函数中有一个对ConnectNamedPipe的调用。我看过一些关于Windows机器上ConnectNamedPipe死锁的帖子。我试图中断被阻塞的线程,但这并不能解除阻塞线程

我不太清楚这个解决方案是什么,但是我会考虑不使用附加API(虽然我更喜欢坚持我当前的解决方案)。我正在使用Attach API使用
VirtualMachine.list()
在本地机器上运行JVM。然后我用它来获取系统属性并通过JMX连接到它们。我知道我可能会创建一个自定义的解决方案,使用一个库通过网络在进程之间进行通信,但我更愿意在进程之间使用操作系统级通信,这就是我相信Attach API正在使用的


所以我的问题是,我的问题有什么解决办法吗?或者是否有任何库可以为我提供与VirtualMachine.list()相同的功能?

在这种情况下,您希望发生什么?对于这样的问题,一个常见的解决方案是让一个观察线程等待该线程完成一项任务,如果它在一段时间内没有完成任务,则假定存在死锁并退出该进程。很明显,这是一个非常繁重的操作,但是在这种情况下,没有什么其他方法是“正确的”。

什么意思是中断线程不起作用?它什么也不做?中断被阻止的线程并不能解除它的阻止。还要尝试停止()线程(顺便说一句,这是个坏主意,但看看它的行为如何)。这是中断的文件:你能告诉我你是怎么中断的吗?