Według MySQL dokumentacja "zabij połączenie thread_id" powinno zakończyć połączenie skojarzone z podanym thread_id. Ale wygląda na to, że tak się nie dzieje (w takim przypadku wątek Javy będzie czekał na odpowiedź w nieskończoność). Być może możesz sprawdzić, czy połączenie jest rzeczywiście zamknięte, używając jakiegoś narzędzia sieciowego (np. netstat).
Zetknąłem się już z zawieszaniem się połączeń MySQL i musiałem użyć socketTimeout Parametr połączenia JDBC (ale uważaj:socketTimeout musi być większy niż czas potrzebny na wykonanie najdłużej działającego zapytania). Możesz również spróbować użyć Limit czasu zapytania za przygotowane oświadczenie.