昨日アップした以下のエントリのフォローアップです。
JDBCのStatement#cancelは即座の中断を期待してはいけないみたい
http://d.hatena.ne.jp/aoe-tk/20121112/1352729379
JDK7 (JDBC4.1) では、 java.sql.Connection に、JDBC接続を強制的に切断するための abort というメソッドが追加されていました。
MySQLのバグトラックのこのチケットでもこのメソッドについて説明されています。
This is precisely the reason the JDBC-4.0 spec added the abort() method. There is no foolproof way to implement the semantics of Connection.close() *and* never have deadlocks.
The abort() method is designed to be used in these cases (it takes no locks, but doesn't attempt to clean up currently open statements, etc).