From 533f24d07720369361058d697af376f8ad64d948 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 4 Sep 2011 11:03:24 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8lockInterruptibly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@625 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 2f516c133c..a958ba0b1e 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -108,7 +108,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return; } - lock.lock(); + try { + lock.lockInterruptibly(); + } catch (InterruptedException e) { + throw new SQLException("interrupt", e); + } + try { if (inited) { return; @@ -298,7 +303,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private PoolableConnection getConnectionInternal() throws SQLException { PoolableConnection poolalbeConnection; - lock.lock(); + try { + lock.lockInterruptibly(); + } catch (InterruptedException e) { + throw new SQLException("interrupt", e); + } + try { if (!enable) { connectErrorCount++; @@ -484,7 +494,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } - void putLast(ConnectionHolder e) throws InterruptedException { + void putLast(ConnectionHolder e) { if (e == null) { throw new NullPointerException(); } @@ -599,7 +609,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat int errorCount = 0; for (;;) { // addLast - lock.lock(); + try { + lock.lockInterruptibly(); + } catch (InterruptedException e2) { + break; + } + try { // 必须存在线程等待,才创建连接 int waitThreadCount = lock.getWaitQueueLength(notEmpty); @@ -773,7 +788,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat public void shrink(boolean checkTime) { final List evictList = new ArrayList(); - lock.lock(); + try { + lock.lockInterruptibly(); + } catch (InterruptedException e) { + return; + } + try { final int checkCount = poolingCount - minIdle; for (int i = 0; i < checkCount; ++i) {