Mylisz tutaj blokady bazy danych z blokadami Java. JMC pokazuje tylko blokady wewnątrz twojego programu Java (synchronizowane bloki, oczekiwania itp.), nie wie nic o tym, co dzieje się w twoim DB. Twoje zapytanie SQL pokazuje tylko blokady na poziomie bazy danych (blokady tabeli, blokady wierszy itp.) i nic nie wie o blokadach w twoim programie Java. To są zupełnie inne obszary i zupełnie inne zamki.
Masz tutaj zrzut wątku, który blokuje obiekt typu T4CConnection
z adresem 0x7af3423c0
. Oznacza to tylko, że ten wątek jest w trakcie wykonywania kodu wewnątrz jakiegoś synchronized(connection)
blok. To wszystko. Wątek nie jest blokowany przez inne wątki (w przeciwnym razie jego stan nie byłby RUNNABLE
, byłoby to WAITING
lub BLOCKED
). Działa i odczytuje coś z gniazda sieciowego (prawdopodobnie odpowiedź z bazy danych).
Takie zachowanie jest absolutnie normalne. Sterownik DB wykonuje synchronizację na instancji połączenia, gdy jest w trakcie wykonywania zapytania SQL, aby uniemożliwić innym wątkom używanie go równolegle.
Na tym zrzucie ekranu i w tym zrzucie wątków nie ma się czym martwić.