1

我在玩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 没有。为什么以及它是什么意思?

提前感谢您的回答。

最好的问候,马库斯

4

0 回答 0