J'utilise c3p0 pour gérer le regroupement de connexions de base de données dans un environnement multithread. La question peut concerner d'autres bibliothèques de mise en commun, mais c'est ce que j'ai.Mise en pool de connexions et Thread.interrupt()
Récemment, j'ai besoin pour mettre en œuvre interrupt manipulation d'ions sur ces fils en utilisant c3p0 directement ou indirectement, et ont remarqué que si interrupt()
est appelé à droite quand c3p0Datasource.getConnection()
tente de me chercher un Connection
de la piscine, il jette un InterruptedException
.
De toute évidence, cela se produit à cause de la wait()
at java.lang.Object.wait(Native Method)
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1414)
cool. La question est de savoir comment gérer cela correctement - à la fois le cas a) vous voulez continuer avec la transaction avant que votre thread se termine, et b) vous voulez abandonner.
J'ai essayé une solution qui semble fonctionner correctement (affichée comme réponse) - en fait, je pense que ce sujet est fermé. Ne hésitez pas à puce dans le cas contraire, merci!