2011-09-23 66 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()