我在玩jstack。没有太多关于线程转储显示的信息。
在玩耍时,我得到了两个不同的线程转储:
转储 1:
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1115)
- locked <0x00000007e9a52840> (a org.apache.tomcat.dbcp.pool.impl.GenericObjectPool$Latch)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
[...]
转储 2:
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x9a000c30> (a org.apache.tomcat.dbcp.pool.impl.GenericObjectPool$Latch)
at java.lang.Object.wait(Object.java:485)
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)
- locked <0x9a000c30> (a org.apache.tomcat.dbcp.pool.impl.GenericObjectPool$Latch)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
[...]
(为了完整起见:两个转储均取自 Tomcat 6 安装)
这里看到的是: - 两个线程都处于 WAITING 状态。- 两个线程都进入了方法 borrowObject() 中的同步块 - 两个线程似乎都在 GenericObjectPool$Latch 类型的(不同)对象上调用了 wait()。
我还看到,转储 2 显示“-正在等待...”,但转储 1 没有。为什么以及它是什么意思?
提前感谢您的回答。
最好的问候,马库斯