jstackで遊んでいます。スレッド ダンプが示す内容については、あまり情報がありません。
遊んでいるうちに、2 つの異なるスレッド ダンプを取得しました。
ダンプ 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 には表示されません。その理由と意味は?
ご回答ありがとうございます。
よろしく、 マーカス