2011-09-23 89 views
1

在java中,我有2個線程同時啓動。但是,我注意到線程2被阻塞,但我不知道在哪裏。在java中找到線程被阻塞/等待的方法嗎?謝謝你。找出線程被阻塞的位置

回答

1

你可以使用jstack來獲取堆棧跟蹤的所有線程。這會告訴你你的線程在代碼中的確切位置。

要更詳細地瞭解過程中發生的情況,可以使用VisualVM

1

您可以使用isAlive()方法來驗證線程是否仍然有效。下面是一個示例代碼來檢查所有的線程在你的記憶:

public class ThreadStates{ 
public static void main(String[] args){ 
    Thread t = new Thread(); 
    Thread.State e = t.getState(); 
    Thread.State[] ts = e.values(); 
    for(int i = 0; i < ts.length; i++){ 
    System.out.println(ts[i]); 
    } 
} 
} 
+0

這是有用的知道我的線程是否仍然活着,但我想知道在我的代碼線程正在等待..因爲它沒有按預期運行 – delita

0

您可以使用jstack來查找線程被阻塞的位置。但是,如果你想檢查同一個程序中的線程,你可以使用thread.getStackTrace()