问一个关于数据库连接池的问题

hanbaoju1982 2004-07-20 11:29:59
我看了看雷霆论坛的源码,对连接池部分有点疑惑,请大家指点,源码如下:
import java.util.Vector;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import lightningboard.Configuration;

/**
* Database Connection Manager
* @version 0.3.5
* @author Xiaobo Liu
*/
public class DBConnectionManager {
private final static DBConnectionManager instance=new DBConnectionManager();
private DBConnectionPool pool;

/**
* Use singleton pattern, only return one instance of DBConnectionManager.
* @return DBConnectionManager
*/
public static DBConnectionManager getInstance() {
return instance;
}
/**
* Get a connection
* @return Connection
* @throws SQLException this method
*/
public Connection getConnection() throws SQLException{
return pool.getConnection();
}
/**
* Free a connection
* @param con connection
* @throws SQLException this method
*/ public void freeConnection(Connection con) throws SQLException{
pool.freeConnection(con);

}
private DBConnectionManager() {
init();
}
private void init() {
Configuration cfg=Configuration.getInstance();
String db_driver=cfg.getValue("DB.DRIVER");
String db_url=cfg.getValue("DB.URL");
String db_user=cfg.getValue("DB.USER");
String db_password=cfg.getValue("DB.PASSWORD");
int db_maxConn=Integer.parseInt(cfg.getValue("DB.MAX_CONNECTIONS"));
try {
Class.forName(db_driver);
}
catch (ClassNotFoundException ex) {
System.out.println(ex);
}
pool = new DBConnectionPool(db_url,db_user,db_password,db_maxConn);
}

// inner class


class DBConnectionPool {

private Vector freeConnections = new Vector();
private int maxConn;
private int connNumb;

private String URL;
private String password;
private String user;

public DBConnectionPool(String URL, String user, String password,int maxConn) {
this.URL = URL;
this.user = user;
this.password = password;
this.maxConn = maxConn;
}

public synchronized void freeConnection(Connection con) {
freeConnections.addElement(con);
connNumb--;
notifyAll();
}

public synchronized Connection getConnection() throws SQLException{
Connection con = null;
if (freeConnections.size() > 0) {
con = (Connection) freeConnections.firstElement();
freeConnections.removeElementAt(0);
try {
if (con.isClosed()) {
con = getConnection();
}
}
catch (SQLException e) {
con = getConnection();
}
}
else if (maxConn == 0 || connNumb < maxConn) {
con = newConnection();
}
if (con != null) {
connNumb++;
}
return con;
}

private Connection newConnection() throws SQLException{
Connection con =DriverManager.getConnection(URL,user, password);
return con;
}
}


}
问题如下:
在内部类的freeConnection方法中,notifyAll();语句的作用是什么??
这个方法不是用于线程间协调通讯,一般和wait()一起用的吗?
在这里这一句不加行不行??
...全文
57 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧