单例模式——数据库连接池设计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 小时前
列式数据库-以clickHouse为例
数据库·clickhouse
Elastic 中国社区官方博客1 小时前
使用 Elastic Cloud Serverless 扩展批量索引
大数据·运维·数据库·elasticsearch·搜索引擎·云原生·serverless
liulanba1 小时前
AI Agent技术完整指南 第一部分:基础理论
数据库·人工智能·oracle
没有bug.的程序员1 小时前
服务安全:内部服务如何防止“裸奔”?
java·网络安全·云原生安全·服务安全·零信任架构·微服务安全·内部鉴权
逆天小北鼻1 小时前
Oracle 服务端与客户端的核心区分要点
数据库·oracle
2501_946242931 小时前
MPV-EASY Player (MPV播放器) v0.41.0.1
数据库·经验分享·云计算·计算机外设·github·电脑·csdn开发云
一线大码1 小时前
SpringBoot 3 和 4 的版本新特性和升级要点
java·spring boot·后端
weixin_440730502 小时前
java数组整理笔记
java·开发语言·笔记
weixin_425023002 小时前
Spring Boot 实用核心技巧汇总:日期格式化、线程管控、MCP服务、AOP进阶等
java·spring boot·后端
一线大码2 小时前
Java 8-25 各个版本新特性总结
java·后端