三个实例演示 Java Thread Dump 日志分析 (2)

waiting on condition 与 parking to wait for <0x000000072740b888> 结合来看, 该线程肯定是在等待某个条件触发来唤醒自己;

示例三 "http-nio-58032-exec-307" #24690 daemon prio=5 os_prio=0 tid=0x00007f1c341b0800 nid=0x25e19 in Object.wait() [0x00007f199477a000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:502) at org.apache.http.concurrent.BasicFuture.get(BasicFuture.java:82) - locked <0x00000007162a9628> (a org.apache.http.concurrent.BasicFuture) at org.apache.http.impl.nio.client.FutureWrapper.get(FutureWrapper.java:70)

在 Wait Set 队列中等待的线程状态就是 in Object.wait(); 当线程获得了 Monitor, 进入了临界区之后, 如果发现线程继续运行的条件没有满足, 则会调用对象(一般是被 synchronize 的对象) 的 wait() 方法, 放弃了 Monitor, 进入 Wait Set 队列; 只有当别的线程在该对象上调用 notify() 或者 notifyAll() 时, Wait Set 队列中的线程才得到机会去竞争; 但是也只有一个线程会获得对象的 Monitor, 恢复到运行态;

BasicFuture 的 get 方法, 表示异步请求时等待结果返回;

参考资料

三个实例演示 Java Thread Dump 日志分析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpggpw.html