找出线程被阻止的位置

时间:2011-09-23 14:45:16

标签: java multithreading

在java中,我有2个线程同时启动。但是,我注意到线程2被阻止但我不知道在哪里。在java中有没有办法找出线程被阻塞/等待的位置?谢谢你。

3 个答案:

答案 0 :(得分:2)

您可以使用jstack来获取所有线程的堆栈跟踪。那将告诉你线程在代码中的确切位置。

要详细了解流程中发生的情况,可以使用VisualVM

答案 1 :(得分: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]); 
  }   
 }
}

答案 2 :(得分:1)

您可以使用jstack查找线程被阻止的位置。但是,如果要在同一程序中检查线程,可以使用thread.getStackTrace()