2013-10-27 34 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不會自行掛斷!