package com.cvicse.officer.factory;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;import java.util.LinkedList;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class ConnectionFactory { public static Connection getConnection() {

connetLock.lock();
try{
if(conList.size()==0){
if(count<MAX_COUNT){
count++;
return MakeConnection();
}else
condition.await();
}else{

return conList.poll();
}
}catch(InterruptedException e){

}finally{
connetLock.unlock();
}

return null;
} public static void putBackConnection(Connection e) {

conList.add(e);
condition.signalAll();
} private static Connection MakeConnection() {
String url = "jdbc:microsoft:sqlserver://192.168.132.55:1433;DatabaseName=db_work";
String classforname = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String uid = "sa";
String pwd = "sa";
Connection conn=null;
try {
Class.forName(classforname);
conn = DriverManager.getConnection(url, uid, pwd);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
}
return conn; } private static int MAX_COUNT = 30; private static LinkedList<Connection> conList = new LinkedList<Connection>(); private static int count = 0; private static Lock connetLock = new ReentrantLock(); private static Condition condition = connetLock.newCondition();


}
只有上面标为红色的注释掉才能正确运行,但是如果一个线程因无法在池中获得连接,而阻塞。那么当有的线程归还连接的时候,就不能唤醒了,大家给个解释吧。