Я использую c3p0 для обработки пула соединений с базой данных в многопоточной среде. Вопрос может относиться к другим пулам библиотек, но это то, что у меня есть.Пул соединений и Thread.interrupt()
Недавно я необходимо реализовать interrupt обработку ионов на таких потоках с использованием прямо или косвенно c3p0, и заметил, что если interrupt()
называется правильно, когда c3p0Datasource.getConnection()
пытается принести мне Connection
из бассейна, он бросает InterruptedException
.
Очевидно, что это происходит из-за wait()
at java.lang.Object.wait(Native Method)
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1414)
Круто. Вопрос в том, как вы справляетесь с этим правильно - и то, и другое: а) вы хотите продолжить транзакцию до того, как ваш поток завершится, и b) вы хотите прервать.
Я пробовал решение, которое, кажется, работает нормально (опубликовано как ответ) - на самом деле, я думаю, этот вопрос закрыт. Не стесняйтесь чип в противном случае, спасибо!