java线程转储“等待条件”的意义

Posted

技术标签:

【中文标题】java线程转储“等待条件”的意义【英文标题】:java threadump significance of "waiting on condition" 【发布时间】:2013-12-11 15:35:21 【问题描述】:

我有一个应用程序的线程转储,其中显示了如下所示的 3 个线程。

================

"http-443-11" daemon prio=10 tid=0x00000000473bc800 nid=0x3590 waiting on condition [0x0000000061818000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007612a3880> (a java.util.concurrent.Semaphore$NonfairSync)

"http-443-4" daemon prio=10 tid=0x00000000451f6000 nid=0x243a waiting on condition [0x0000000055354000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007612a3880> (a java.util.concurrent.Semaphore$NonfairSync)

"http-443-7" daemon prio=10 tid=0x000000004602e000 nid=0x2974 waiting on condition [0x000000005e6e7000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007612a3880> (a java.util.concurrent.Semaphore$NonfairSync)

================

“等待条件[]”的意义是什么? []中的数字是什么意思?

【问题讨论】:

【参考方案1】:

在线程堆栈中,我们可以看到线程是守护线程,正在等待任务到来。由于这些线程是在 JVM 启动时创建的,除非 JVM 退出或我没有运行任何非守护线程,否则它们不会被杀死,因此它们等待任务的到来。假设垃圾收集线程是一个守护线程,它可能不会一直运行,它可能处于等待状态。

【讨论】:

我们看到的 3 个线程是守护线程——由 Tomcat AppServer 创建。但是,这些线程不是在“JVM”启动时创建的。

以上是关于java线程转储“等待条件”的意义的主要内容,如果未能解决你的问题,请参考以下文章

Java并发程序设计(16)并发锁之条件变量

Day826.Java多线程等待&通知机制 -Java 并发编程实战

Day826.Java多线程等待&通知机制 -Java 并发编程实战

java多线程系列-死锁与活锁的区别,死锁与饥饿的区别

kill -3 获取java线程转储

获取Java线程转储的常用方法