Você está confundindo bloqueios de banco de dados com bloqueios Java aqui. O JMC mostra apenas os bloqueios dentro do seu programa Java (blocos sincronizados, esperas etc), ele não sabe nada sobre o que está acontecendo dentro do seu banco de dados. Sua consulta SQL mostra apenas os bloqueios no nível do banco de dados (bloqueios de tabela, bloqueios de linha etc.) e não sabe nada sobre os bloqueios dentro do seu programa Java. Essas são áreas absolutamente diferentes e fechaduras absolutamente diferentes.
O que você tem aqui é um dump de um thread que mantém um bloqueio no objeto do tipo
T4CConnection
com o endereço 0x7af3423c0
. Significa apenas que esta thread está em processo de execução de um código dentro de algum synchronized(connection)
quadra. Isso é tudo. O encadeamento não está bloqueado por outros encadeamentos (caso contrário, seu estado não seria RUNNABLE
, seria WAITING
ou BLOCKED
). Ele está executando e lendo algo de um soquete de rede (provavelmente, a resposta do banco de dados). Tal comportamento é absolutamente normal. O driver de banco de dados faz a sincronização na instância de conexão enquanto está no processo de execução de uma consulta SQL para não permitir que outros threads a usem em paralelo.
Não há nada com que você deva se preocupar nesta captura de tela e neste despejo de thread.