Насколько мне известно, такой альтернативы нет, если сама сеть выходит из строя.
Точные детали setQueryTimeout включают в себя указание драйверу JDBC отправить внеполосный сигнал (по крайней мере, в случае OracleДрайвер JDBC) к базе данных, чтобы остановить выполнение подготовленного оператора;эта часть важна, так как зависит от поддержки, встроенной в драйвер и базу данных.После этого это зависит от базы данных, чтобы запланировать выполнение этой операции отмены;это может занять некоторое время, если необходимо откатить вещи или выполнить другие транзакции и т. д.
Учитывая первую часть характера реализации, весьма маловероятно, что «чистая» реализацияфункция тайм-аута может быть установлена.Возможно, вы захотите исследовать использование менеджера транзакций здесь (возможно, JTA), но я не уверен, что встретится с другим набором странных исключений (например, эвристических исключений).
Добавление
Использование монитора потоков, который отслеживает выполнение других потоков и убивает «зависшие» потоки, может быть плохой идеей. Этот вопрос SO поможет ответить на вопрос, почему следует избегать такой деятельности.Это также тактика , выбранная WebLogic Server .