我有jstack,其中许多线程处于等待状态,描述为“等待停车”,例如:
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@11.0.3/Native Method)
- parking to wait for <0x0000000307db96c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@11.0.3/LockSupport.java:194)
这个大十六进制数字是多少?是时间吗是标识符吗?
编辑
我已将Java应用程序的状态转储到了早上和下午工作很长时间(几天)的线程。我看到“等待状态”具有相同的大十六进制数,但“停放等待”中的其他大十六进制数却不同:
早晨:
"qtp792232038-1037-..." #1037 prio=5 os_prio=0 cpu=787.64ms elapsed=528768.56s tid=0x00007f164004a800 nid=0x1346
waiting on condition [0x00007f181fffd000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@11.0.3/Native Method)
- parking to wait for <0x000000030a69c410> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@11.0.3/LockSupport.java:194)
...
几个小时后:
"qtp792232038-1037-..." #1037 prio=5 os_prio=0 cpu=787.64ms elapsed=546900.36s tid=0x00007f164004a800 nid=0x1346
waiting on condition [0x00007f181fffd000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@11.0.3/Native Method)
- parking to wait for <0x0000000307db96c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@11.0.3/LockSupport.java:194)
...
答案 0 :(得分:1)
是的,它是锁对象的内部标识符。
您可以使用它查看哪个线程正在等待其他线程。
在线程转储中搜索此ID,应该提到另一个带有堆栈框架的线程,该线程持有具有相同ID的锁。