2011-10-05 90 views
3

运行过程中出现的线程转储的Tomcat进程CompilerThread状态我只是注意到如下:在Tomcat 6

"CompilerThread0" daemon prio=10 tid=0x02b57400 nid=0xe0c waiting on condition [0x00000000] 
    java.lang.Thread.State: RUNNABLE 

我的理解是,CompilerThread(任何数量)是由JVM编译字节码转换为本地代码运行,但我想就此进行确认。 但我主要关心的是线程说'处于等待状态',但后来在RUNNABLE状态下声明。 我误解了什么?最后,[0x00000000]的含义是什么?

感谢

回答

2

所以一个逐个字段细分:

  1. "CompilerThread0" - Tomcat有用于编译JSP编译器线程。首次访问JSP时,JSP将被编译为一个Java类。
  2. daemon - 这是一个守护线程,以免让你的应用程序活着的时候,你选择退出
  3. prio=10 - 使JSP编译优先于其他请求最高的优先级。
  4. nid=0xe0c - 实际上不知道。 ;)
  5. waiting on condition [0x0000000] - 该线程当前阻止等待某人发出信号唤醒并执行某些操作。与nid一样,我并不确定[0x000000]是指什么。如果那是我们正在等待的东西,我怀疑它会保存一个对象监视器的地址。
  6. java.lang.Thread.State: RUNNABLE - 一个线程等待条件仍然被认为不善于RUNNABLE

一两件事,看起来有点麻烦,首先是线程可运行,即使它在等待。这是违反直觉的,但它与JVM区分条件和对象监视器(例如用于等待/通知的机制)的事实有关。

希望有帮助!

+0

好吧,它确实是违反直觉的,因为其他一些线程被标记为“等待状态”并处于WAITING(睡眠)状态。该nid是操作系统本机进程标识 – Leonardo