Statement.cancel () и его гарантия безопасности потока - PullRequest
3 голосов
/ 04 января 2011

К сожалению, в спецификации jdbc ничего не сказано о гарантиях Statement.cancel().

Единственное, что указано в javadoc , это то, что Statement.cancel() является поточно-безопасным .
Но:

  • Гарантируется ли, что cancel() всегда будет работать?
    (таким образом, что поток, который в данный момент выполняет Statement, немедленно разблокируется и продолжится)
  • Гарантируется ли, что cancel() не заблокирует и (более или менее) немедленно вернется?

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Гарантируется ли, что cancel () всегда будет работать?

Нет.По крайней мере, не в моем опыте.Я думаю, что мне даже приходилось иметь дело с драйверами, которые просто выдавали исключение UnsupportedOperationException

Гарантируется ли, что метод cancel () не заблокирует и (более или менее) немедленно вернет

НетВ зависимости от выполняемого оператора, иногда метод cancel () может ждать, пока не будет возвращена первая строка запроса.Опять же, это сильно зависит от водителя.

2 голосов
/ 04 января 2011

Из того же Javadoc:

если СУБД и драйвер поддерживают прерывание оператора SQL

Это ограничивает гарантию. Другое ограничение заключается в том, что конкретный драйвер реализует Statement.cancel(), другими словами, реализация не является частью Java RE.

Так что отмена действительно должна быть поточно-ориентированной, но вам нужно будет спросить поставщика о вашем фактическом драйвере / СУБД.

...