以下是一个简单的Java代码示例,演示了如何使用单例模式来设计一个数据库连接池:
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;
public class DatabaseConnectionPool {
private static DatabaseConnectionPool instance; private List connectionPool;
private String dbUrl;
private String dbUser;
private String dbPassword;
private DatabaseConnectionPool() { connectionPool = new ArrayList<>();
dbUrl = "jdbc:mysql://localhost:3306/mydatabase"; dbUser = "root";
dbPassword = "password";
init();
}
public static synchronized DatabaseConnectionPool getInstance() {
if (instance == null) {
instance = new DatabaseConnectionPool();
}
return instance;
}
public synchronized Connection getConnection() throws SQLException {
if (connectionPool.isEmpty()) {
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
connectionPool.add(conn);
return conn;
} else {
return connectionPool.remove(0);
}
}
private void init() {
for (int i = 0; i < 10; i++) {
try { connectionPool.add(DriverManager.getConnection(dbUrl, dbUser, dbPassword));
} catch (SQLException e) { e.printStackTrace();
} } }}
在这个示例中,使用了单例模式来保证在整个应用程序中只有一个DatabaseConnectionPool实例。
使用getInstance()方法来获取这个实例。在getInstance()方法中,如果instance为空,则创建一个新的DatabaseConnectionPool实例。
在getConnection()方法中,从连接池中获取一个连接(如果池为空,则创建一个新连接),并将其返回给调用方。如果池不为空,则从池中获取第一个连接并返回它。
init()方法用于初始化连接池,其中创建了10个连接并将其添加到连接池中。
请注意,例子中在getInstance()方法和getConnection()方法中使用了synchronized关键字,以确保线程安全。