4
我有一个线程转储,其中有:TIMED_WAITING线程标记为可运行
"http-9443-67" daemon prio=10 tid=0x00007f1d5c37e800 nid=0x10331 runnable [0x00007f1d50da9000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000032e818150> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.LinkedBlockingDeque.pollFirst(LinkedBlockingDeque.java:470)
at java.util.concurrent.LinkedBlockingDeque.poll(LinkedBlockingDeque.java:633)
at ...
和
"http-9443-69" daemon prio=10 tid=0x00007f1d5c8a1000 nid=0x10333 waiting on condition [0x00007f1d511af000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000326940d48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.LinkedBlockingDeque.pollFirst(LinkedBlockingDeque.java:470)
at java.util.concurrent.LinkedBlockingDeque.poll(LinkedBlockingDeque.java:633)
at ...
这是在TIMED_WAITING状态都。
但是:
- HTTP-9443-67被标记为可运行
- HTTP-9443-69被标记为等待条件
你知道这是什么意味着?
我好像记得,有热点中的一小段代码的比赛条件,可能导致错误的线程状态被显示,但我找不到它的任何痕迹。如果我的记忆不在戏弄我,那肯定会解释你所看到的。你有可复制的测试用例吗?它依赖于JDK版本吗? – rxg