繁体   English   中英

找出线程被阻止的位置

[英]Find out where a thread has been blocked

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

您可以使用jstack来获取所有线程的堆栈跟踪。 那将告诉你线程被阻止的代码到底在哪里。

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

您可以使用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]); 
  }   
 }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM