|
|
|
@ -613,6 +613,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void checkThread() throws SQLException { |
|
|
|
|
if (createConnectionThread == null){ |
|
|
|
|
throw new IllegalStateException("createConnectionThread not start!"); |
|
|
|
|
} |
|
|
|
|
if (destroyConnectionThread == null){ |
|
|
|
|
throw new IllegalStateException("destroyConnectionThread not start!"); |
|
|
|
|
} |
|
|
|
|
if (!createConnectionThread.isStarted() && !destroyConnectionThread.isStarted()) { |
|
|
|
|
synchronized (this) {//线程安全问题,加个双检锁
|
|
|
|
|
if (!createConnectionThread.isStarted() && !destroyConnectionThread.isStarted()) { |
|
|
|
@ -2152,8 +2158,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
Thread.sleep(timeBetweenConnectErrorMillis); |
|
|
|
|
} catch (InterruptedException interruptEx) { |
|
|
|
|
break; |
|
|
|
|
} catch (InterruptedException ignore) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
DruidDataSource.this.createThreadChange(); |
|
|
|
|
break; |
|
|
|
|