java - jstack输出中的大十六进制数字显示“停车等待......”是什么意思?
问题描述
我有 jstack,其中许多线程处于 WAITING 状态,描述为“停车等待”,例如:
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)
...
解决方案
是的,它是锁对象的内部标识符。
您可以使用它来查看哪个线程正在等待哪个其他线程。
在线程转储中搜索此 ID,应该有另一个线程提到了一个堆栈帧,该堆栈帧持有具有相同 ID 的锁。
推荐阅读
- notifications - 在 Azure DevOps 部署之后按阶段通知指定收件人的最佳方式是什么
- ios - iOS 版本与 iOS sdk
- php - JWT - 第二次刷新后的 TOKEN_EXPIRED
- javascript - 如何解决页面加载时的按键事件?
- jquery - 从日期开始以 HTML 格式显示来自 jQuery/Ajax 的 json 数据
- xamarin - 如何在 Xamarin.iOS 中将 ARGB8888 转换为 420Yp8_CbCr8?
- c++ - 在 Windows IDE 中编写 C++ 代码并在 Linux 终端中编译的有效方法?
- java - 当我将样式表链接到 Thymleaf 页面时,为什么 SpringBoot 会掉线?
- vue.js - v-pre 在带有插槽的自定义组件上
- wpf - Wpf 像画布一样渲染整个图像