如何知道在哪个线程是“等待”的情况?

CuriousMind:

我调试现场环境,我已经采取了一些线程转储。我看到很多线程的是“条件等待”; 但我怎么能知道条件是什么?

下面是真正的线程转储栈的片段:

"Uploader-pool-job-create-ca2d264a-51b3-4fa3-8113- 
f0f0aca47add-StreamThread-10-0_14" #140 daemon prio=5 os_prio=0 
tid=0x00007f006002b800 nid=0x18b waiting on condition 
[0x00007f004d9e1000]
 java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000002c20d4320> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

其他:

"Uploader-pool-job-create-ca2d264a-51b3-4fa3-8113- 
f0f0aca47add-StreamThread-3-0_16" #138 daemon prio=5 os_prio=0 
tid=0x00000000025da000 nid=0x189 waiting on condition 
[0x00007f004dbe3000]
java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000002c20d6690> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

在这些线程它说:“等待状态”; 但我认不出是什么条件上的线程正在等待?

- >在一般情况下,是否有任何指引如何理解线程转储。

rustyx:

这一切都没有在堆栈跟踪- ScheduledThreadPoolExecutor正在等待available状态:

private final Condition available;
. . .

     available.awaitNanos(delay);   // ScheduledThreadPoolExecutor.java:1093

换句话说,在池中的线​​程空闲,等待更多的工作。

在一般情况下,堆栈跟踪显示完全的Java文件名和行号执行的线程是目前(通常当一个线程在等待,最深的几级就太低级,所以才继续环比上涨找到最有意义的水平)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

动态链接器如何知道要在哪个库中搜索符号?

Eclipse-如何在不单击/更改主视图的情况下知道我在哪个工作空间上工作

如何查看线程在哪个CPU内核中运行?

Java-如何知道线程何时在等待?

我如何知道哪个线程调用了我的Log方法?

如何知道哪个线程先完成

如何知道我的flink作业在哪个任务管理器上运行?

异步等待异常捕获-我在哪个线程上?

如何知道哪个方法启动了工作线程

如何知道我的脚本在哪个Python实例上运行?

调度程序如何知道线程被阻塞以等待输入?

确定哪个线程在哪种情况下工作

当PV由逻辑卷支持时,Kubernetes如何知道在哪个节点上调度其POD?

我如何知道我的阵列存储在哪个缓存级别?

如何使用lldb列出每个线程在哪个函数中?

等待函数如何知道要选择哪个线程信息

git如何知道在哪个提交中检出子模块?

如何知道我在哪个地理围栏中?

Chrome:正在等待www.site.com,如何知道哪个资源在延迟页面加载?

如何知道域名在哪个国家注册?

如何知道我的对象当前在哪个标签中?

您如何知道文件在哪个硬盘上?

如何知道在哪个项目中单击了按钮

如何知道我在哪个shell窗口中?

我如何知道Windows安装在哪个驱动器上?

如何知道片段附着在哪个活动上?

如何等待线程等待

如何让 JButton 知道它在哪个面板上被点击?

如何知道类在哪个进程中运行?