单例模式——数据库连接池设计Java代码实现

以下是一个简单的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关键字,以确保线程安全。

相关推荐
麦兜*1 小时前
Spring Boot 企业级动态权限全栈深度解决方案,设计思路,代码分析
java·spring boot·后端·spring·spring cloud·性能优化·springcloud
小苹果13571 小时前
阿里云mysql数据丢失,如何通过服务器备份在其他服务器上恢复数据,并获取mysql丢失数据,完成mysql数据恢复
服务器·mysql·阿里云
张璐月2 小时前
mysql join语句、全表扫描 执行优化与访问冷数据对内存命中率的影响
数据库·mysql
ruan1145142 小时前
MySQL4种隔离级别
java·开发语言·mysql
全干engineer4 小时前
ClickHouse 入门详解:它到底是什么、优缺点、和主流数据库对比、适合哪些场景?
数据库·clickhouse
Hellyc6 小时前
基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
java·数据库·设计模式·rocketmq
lifallen6 小时前
Paimon LSM Tree Compaction 策略
java·大数据·数据结构·数据库·算法·lsm-tree
追烽少年x6 小时前
设计模式---观察者模式(发布-订阅模式)
网络·设计模式
秋田君6 小时前
深入理解JavaScript设计模式之命令模式
javascript·设计模式·命令模式
花好月圆春祺夏安6 小时前
基于odoo17的设计模式详解---享元模式
设计模式·享元模式