单例模式——数据库连接池设计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关键字,以确保线程安全。

相关推荐
Decay__12 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
太理摆烂哥12 小时前
MySQL用户管理
数据库·mysql
LMT流氓兔13 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
wangbing112514 小时前
平台介绍-modbus设备调试
java
梦影_14 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
考虑考虑14 小时前
mariadb数据库
数据库·后端·mariadb
西索斯coding14 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
wuminyu15 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
Flynn Liang15 小时前
大模型怎么自己调函数?Spring AI 2.0 Tool Calling 自动循环原理 + 完整时序图
java·人工智能·spring·agent·函数调用·springai·toolcalling
John_Hui16 小时前
Windows 10 安装版本:mysql-8.1.0-winx64.zip
数据库·windows·mysql