2013-07-11 37 views
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被标记为等待条件

你知道这是什么意味着?

+0

我好像记得,有热点中的一小段代码的比赛条件,可能导致错误的线程状态被显示,但我找不到它的任何痕迹。如果我的记忆不在戏弄我,那肯定会解释你所看到的。你有可复制的测试用例吗?它依赖于JDK版本吗? – rxg

回答

-1

线程中止执行,因为“)通知(”的wait()调用和什么时候会恢复被称为

+0

问题是,“为什么其中一个线程在其状态为TIMED_WAITING时标记为可运行?” – rxg