cancel() 方法是否保证总是起作用?
不一定。至少在我的经验中并非如此。我认为我甚至需要处理那些只会抛出 UnsupportedOperationException 异常的驱动程序。
cancel() 方法是否保证不会阻塞并(或多或少)立即返回?
不一定。根据正在执行的语句,有时 cancel() 可能会等待直到查询的第一行返回。同样地,这高度依赖于驱动程序。
Statement.cancel(int timeout)
方法,但是我没有找到这个方法 ;) - bobbel从同一个javadoc中:
如果DBMS和驱动程序都支持中止SQL语句
这限制了保证。另一个限制是Statement.cancel()
由具体的驱动程序实现,换句话说,实现不是Java RE的一部分。
因此,取消操作确实应该是线程安全的,但您需要询问实际驱动程序/ DBMS的供应商。