有人帮我处理挂起的 Java 服务器研究了线程转储,但不了解以下状态:
信息 | 虚拟机 1 | 2009/08/30 18:11:46 | “103468119@qtp-2047706572-1”prio=10 tid=0x0000000041758000 nid=0x13d7 等待条件 [0x00007f6dbb75e000] 信息 | 虚拟机 1 | 2009/08/30 18:11:46 | java.lang.Thread.State:可运行 信息 | 虚拟机 1 | 2009/08/30 18:11:46 | 在 java.net.PlainSocketImpl.isConnectionReset(PlainSocketImpl.java:602) 信息 | 虚拟机 1 | 2009/08/30 18:11:46 | - 锁定(一个 java.lang.Object)
代码正在运行
java版本“1.6.0_14” Java(TM) SE 运行时环境 (build 1.6.0_14-b08) Java HotSpot(TM) 64 位服务器 VM(内部版本 14.0-b16,混合模式)
确实,根据PlainSocketImpl源码,即使有内部同步,应该也不可能长时间停留在isConnectionReset()方法中:
public boolean isConnectionReset() {
synchronized (resetLock) {
return (resetState == CONNECTION_RESET);
}
}
无论如何,如果线程被锁阻塞,它的状态将是 BLOCKED。处于 RUNNABLE 状态“等待条件”的线程意味着线程正在等待内部 VM 条件变量。