|
From: Greg Stasica on 21 Jul 2008 19:08 hi, from the stack trace it seems like there are two different threads in synchronized method but how could it be possible ? public class DBQuery{ private static DBQuery dbQuery = null; public static DBQuery getInstance() { if (dbQuery == null) { dbQuery = new DBQuery(); } return dbQuery; } public synchronized void saveAuditVersion(boolean fIncrementVersion) { try{ doSQLStatement(sql); //line 332 } catch(SQLException sqle){... } finally { ...} if(fIncrementVersion){ refData.setAuditVersion(refData.getAuditVersion()+1); //line 348 ...... } public static doSQLStatement(String sql){....} } Thread-159 "[STUCK] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'" <alive, in native, priority=1, DAEMON> { jrockit.net.SocketNativeIO.readBytesPinned(Native Method) jrockit.net.SocketNativeIO.socketRead(Unknown Source) java.net.SocketInputStream.socketRead0(SocketInputStream.java:???) java.net.SocketInputStream.read(SocketInputStream.java:129) oracle.net.ns.Packet.receive(Unknown Source) oracle.net.ns.NSProtocol.connect(Unknown Source) oracle.jdbc.ttc7.TTC7Protocol.connect(TTC7Protocol.java:1689) oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:215) ^-- Holding lock: oracle.jdbc.ttc7.TTC7Protocol(a)295b96a[thin lock] oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java: 360) oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java: 521) oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:325) java.sql.DriverManager.getConnection(Unknown Source) ^-- Holding lock: java.lang.Class(a)10266d9[recursive lock] java.sql.DriverManager.getConnection(Unknown Source) ^-- Holding lock: java.lang.Class(a)10266d9[fat lock] org.apache.commons.sql.util.DataSourceWrapper.getConnection(DataSourceWrapper.java: 117) com.xx.util.DBConnection.connect(DBConnection.java:80) com.xx.server.DBQuery.doSqlGetmultColumns(DBQuery.java:7242) com.xx.server.DBQuery.doSqlGetmultColumns(DBQuery.java:7219) com.xx.server.DBQuery.loadAuditVersion(DBQuery.java:275) com.xx.RefData.getAuditVersion(RefData.java:394) com.xx.server.DBQuery.saveAuditVersion(DBQuery.java:348) ^-- Holding lock: com.xx.DBQuery(a)d903876[fat lock] com.xx.checkSchedule(TestAction.java:904) Thread-160 "[STUCK] ExecuteThread: '13' for queue: 'weblogic.kernel.Default (self-tuning)'" <alive, in native, priority=1, DAEMON> { jrockit.net.SocketNativeIO.readBytesPinned(Native Method) jrockit.net.SocketNativeIO.socketRead(Unknown Source) java.net.SocketInputStream.socketRead0(SocketInputStream.java:???) java.net.SocketInputStream.read(SocketInputStream.java:129) oracle.net.ns.Packet.receive(Unknown Source) oracle.net.ns.NSProtocol.connect(Unknown Source) oracle.jdbc.ttc7.TTC7Protocol.connect(TTC7Protocol.java:1689) oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:215) ^-- Holding lock: oracle.jdbc.ttc7.TTC7Protocol(a)10ea675f[thin lock] oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java: 360) oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java: 521) oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:325) java.sql.DriverManager.getConnection(Unknown Source) ^-- Holding lock: java.lang.Class(a)10266d9[recursive lock] java.sql.DriverManager.getConnection(Unknown Source) ^-- Holding lock: java.lang.Class(a)10266d9[fat lock] org.apache.commons.sql.util.DataSourceWrapper.getConnection(DataSourceWrapper.java: 117) com.xx.util.DBConnection.connect(DBConnection.java:80) com.xx.server.DBQuery.doSQLStatement(DBQuery.java:7160) com.xx.server.DBQuery.saveAuditVersion(DBQuery.java:332) ^-- Holding lock: com.xx.server.DBQuery(a)d903876[fat lock] com.xx.checkSchedule(TestAction.java:904) just to clarify: DBQuery is although not thread-safe initialized singleton class. DBConnection is an utility class with no synchronized methods. As i understand from the stacktrace both threads reference the same memory address and hold the lock ^-- Holding lock: com.xx.server.DBQuery(a)d903876[fat lock] in such a case and excluding any calls to wait() (there is not any) how is it possible that stack trace shows something as above?
|
Pages: 1 Prev: Wisdom of gzipping web pages Next: investors wanted 1,ooo.ooo.oo min... |