我们避免提供对数据库连接的直接访问,因为它们资源密集。所以我们使用一个静态工厂方法getDbConnection,如果我们低于限制创建一个连接。否则,它会尝试提供一个“备用”连接,如果没有则会出现异常。
public class DbConnection
{
private static final int MAX_CONNS = 100;
private static int totalConnections = 0;
private static Set availableConnections = new HashSet();
private DbConnection()
{
// ...
totalConnections++;
}
public static DbConnection getDbConnection()
{
if(totalConnections < MAX_CONNS)
{
return new DbConnection();
}
else if(availableConnections.size() > 0)
{
DbConnection dbc = availableConnections.iterator().next();
availableConnections.remove(dbc);
return dbc;
}
else {
throw new NoDbConnections();
}
}
public static void returnDbConnection(DbConnection dbc)
{
availableConnections.add(dbc);
//...
}
}