2013-10-27 35 views
1

当运行在其中的多个线程 陷入死锁时,Java虚拟机是否有可能自行挂起? 我想问这个问题的目的是: 如果我知道线程可能死锁,我想把一些恢复逻辑,如超时 什么的,并处理这种情况。 如果Java虚拟机自身挂起,则不起作用。线程死锁可以挂起整个JVM本身吗?

Class TwoThreads{ 

try{ 
Thread threadA = new Thread(); 
Thread threadB = new Thread(); 
// some multithreaded logic goes here where deadlock possible 
catch(Throwable t){ 
    threadA.interrupt(); 
    // some handler logic 
    } 

} 
+1

根据定义,死锁不会抛出异常。它会让死锁的线程永远等待。如果死锁是可能的,那么修复代码,使它不再可能。 –

+0

@JB Nizet Tks。我的例子是错误的,但我的问题基本上是知道线程死锁是否可以挂起整个JVM,或者其他部分的应用程序仍然可以继续运行? – supernova

+2

根据定义,死锁会导致一些线程永远等待。如果这些死锁的线程是你的应用程序的唯一线程,那么什么也不会发生。如果有其他线程在运行,那么它们将继续运行。 –

回答

1

如果您遇到死锁,那么这意味着application has designed very BAD!僵局并不是特例,所以你会以不会出现任何僵局的方式管理你的互斥和资源。
但是,当线程要等待notify()信号时,您只需要给wait()方法一个超时。像这样的东西。

public void run(){ 
... 
    _mutex.wait(10000);//release the lock and waits for 10 seconds 
... 
} 

并且关于您的疑问,JVM不会自行挂断!