Stai confondendo i blocchi del database con i blocchi Java qui. JMC ti mostra solo i blocchi all'interno del tuo programma Java (blocchi sincronizzati, attese ecc.), Non sa nulla di ciò che sta accadendo all'interno del tuo DB. La tua query SQL mostra solo i blocchi a livello di DB (blocchi di tabella, blocchi di riga, ecc.) E non sa nulla dei blocchi all'interno del tuo programma Java. Quelle sono aree assolutamente diverse e serrature assolutamente diverse.
Quello che hai qui è un dump di un thread che mantiene un blocco sull'oggetto di tipo T4CConnection
con l'indirizzo 0x7af3423c0
. Significa solo che questo thread sta eseguendo un codice all'interno di alcuni synchronized(connection)
bloccare. È tutto. Il thread non è bloccato da altri thread (altrimenti il suo stato non sarebbe RUNNABLE
, sarebbe WAITING
o BLOCKED
). Sta eseguendo e leggendo qualcosa da un socket di rete (probabilmente, la risposta dal DB).
Tale comportamento è assolutamente normale. Il driver DB esegue la sincronizzazione sull'istanza di connessione mentre sta eseguendo una query SQL per non consentire ad altri thread di utilizzarla in parallelo.
Non c'è nulla di cui dovresti preoccuparti in questo screenshot e in questo dump del thread.