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

相关推荐
曹牧4 分钟前
Spring:@RequestMapping
java·后端·spring
qq_342295825 分钟前
c++怎么获取文件的压缩比例信息_Windows压缩卷特性【详解】
jvm·数据库·python
weixin_458580127 分钟前
CSS如何控制列表间距_使用padding-left与盒模型
jvm·数据库·python
m0_617881428 分钟前
Tailwind CSS如何实现固定定位布局_使用fixed与z-index控制CSS层级
jvm·数据库·python
霸道流氓气质10 分钟前
SpringBoot+LangChain4j+Ollama实现本地大模型语言LLM的搭建、集成和示例流程
java·spring boot·后端
iiiiyu20 分钟前
常用API(SimpleDateFormat类 & Calendar类 & JDK8日期 时间 日期时间 & JDK8日期(时区) )
java·大数据·开发语言·数据结构·编程语言
m0_6742946423 分钟前
Cgo 中正确处理 const char- 类型回调参数的实践方法
jvm·数据库·python
justjinji31 分钟前
Chart.js 4 中实现基于数据极值的垂直线性渐变填充
jvm·数据库·python
小菜同学爱学习33 分钟前
夯实基础!MySQL数据类型进阶、约束详解与报错排查
开发语言·数据库·sql·mysql
迷藏49434 分钟前
# 发散创新:基于Selenium的自动化测试框架重构与实战优化在当今快速迭代的软件开
java·python·selenium·测试工具·重构