c3p0连接池满后的连接死锁有关问题



c3p0连接池满后的连接死锁有关问题。

多线程编程测试条件下:如果c3p0连接池设置过小。当连接池满时。由于没有对各个线程设置优先级。导致后面的线程一直等待连接。造成死锁。
求简洁有效的解决方法。推荐可以解决上面问题的连接池也可以。

jdbc.initialPoolSize=5
jdbc.minPoolSize=3
jdbc.maxPoolSize=10
jdbc.maxIdleTime=600
jdbc.acquireIncrement=2
jdbc.idleConnectionTestPeriod=120
jdbc.maxConnectionAge=400

class T extends Thread {
private int num;
public T(int num) {
this.num = num;
}
@Override
public void run() {
System.out.println(“==in ” + num);
Map<String, Class<?>> map = getTableColumns(“sns_user_main_info”);
System.out.println(“–” + map.size());
System.out.println(“==out ” + num);
}
}

class H extends Thread {
@Override
public void run() {
while(true) {
try {
T t1 = new T(1);
T t2 = new T(2);
T t3 = new T(3);
T t4 = new T(4);
T t5 = new T(5);
T t6 = new T(6);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

——解决思路———————-
连接如果用完了是正常释放的,那连接池满就是你业务确实需要这么大的连接容量,如果是你无论加多大的池容量,都还是会连接池满,那很有可能是连接池泄漏

成熟的商业J2EE应用服务器比如Weblogic是有检测连接泄漏的机制的,开启后可以看到是否有数据库连接没有关闭,在哪个类哪个方法创建的连接等