我有jstack,其中许多线程处于等待状态,描述为"parking to wait for“,如:
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)
...发布于 2019-07-08 17:47:58
是的,它是锁对象的内部标识符。
您可以使用它来查看哪个线程正在等待另一个线程。
在线程转储中搜索此id,应该有一个堆栈框架提到的另一个线程持有具有相同id的锁。
https://stackoverflow.com/questions/56931621
复制相似问题