无效的线程ID参数:0 java,怎么会发生这种情况?

无效的线程ID参数:0 java,怎么会发生这种情况?,java,multithreading,solr,solrcloud,Java,Multithreading,Solr,Solrcloud,我使用Solr4.0,遇到了一个奇怪的错误。我运行了一个包含一个碎片和三个节点的solr云。ThreadDumpHandler告诉我们有一个id为0的无效线程 ThreadMXBean tmbean = ManagementFactory.getThreadMXBean(); long[] tids = tmbean.getAllThreadIds(); log.info("all threads tids:" + (tids == null? "null" :tids.length)); if

我使用Solr4.0,遇到了一个奇怪的错误。我运行了一个包含一个碎片和三个节点的solr云。
ThreadDumpHandler
告诉我们有一个id为0的无效线程

ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();
long[] tids = tmbean.getAllThreadIds();
log.info("all threads tids:" + (tids == null? "null" :tids.length));
if (tids != null) {
  for (long l :tids) {
    log.info(String.valueOf(l));
  }
  log.info("all thread infos:");
  NamedList<SimpleOrderedMap<Object>> lst = new NamedList<SimpleOrderedMap<Object>>();
  for (long l :tids) {
    if (l > 0) {
      ThreadInfo ti = tmbean.getThreadInfo(l, Integer.MAX_VALUE);
      if (ti != null) {
        log.info(ti.toString());
        lst.add( "thread", getThreadInfo( ti, tmbean ) );
      }
    } else {
      log.info("invalid thread id:" + l);
    }

  }
  system.add( "threadDump", lst );
}
ThreadMXBean tmbean=ManagementFactory.getThreadMXBean();
long[]tids=tmbean.getAllThreadId();
log.info(“所有线程tids:+(tids==null?“null”:tids.length”);
如果(tids!=null){
适用于(长l:TID){
log.info(String.valueOf(l));
}
log.info(“所有线程信息:”);
NamedList lst=新NamedList();
适用于(长l:TID){
如果(l>0){
ThreadInfo ti=tmbean.getThreadInfo(l,Integer.MAX_值);
如果(ti!=null){
log.info(ti.toString());
添加(“线程”,getThreadInfo(ti,tmbean));
}
}否则{
log.info(“无效线程id:+l”);
}
}
添加(“线程转储”,lst);
}

您是说您的日志语句“log.info”(“无效线程id:+l”);“正在打印时l的值为零???或者有一些异常???是的,日志语句“log.info”(“无效线程id:+l”);“打印零。那么这有什么错?可能是TID中的一个长线程id可能为零&这就是它必须打印日志语句的原因?你们到底在哪里看到这个问题???请使用零线程id“sun.management.ThreadImpl.getThreadInfo(0)”详细说明,它将引发IllegalArgumentException“无效的线程id参数:xxx”。你不能得到这个线程的“java.lang.management.ThreadInfo”实例。哦,好的,现在我知道了。这似乎有一个开放的bug,所以我想我帮不了什么忙。检查这个