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

相关推荐
王的宝库7 分钟前
【MySQL】主从复制原理详解:从 Binlog 到数据一致性
数据库·mysql
Vect__8 分钟前
MySQL基本认知、库和表的操作
数据库·mysql
若水不如远方10 分钟前
一文讲透单点登录原理(SSO):从同域共享到跨域票据
java·后端
不懂的浪漫11 分钟前
mqtt-plus 架构解析(七):动态订阅与重连恢复,为什么能走同一条协调路径
java·物联网·mqtt·架构
无巧不成书021814 分钟前
Unicode编码机制全解析:从核心原理到Java 实战
java·开发语言·java字符编码·unicode 15.1码点
楼田莉子15 分钟前
设计模式:构造器模式
开发语言·c++·后端·学习·设计模式
mu_guang_18 分钟前
计算机体系结构3-cache一致性和内存一致性的区别
java·开发语言·计算机体系结构
海兰21 分钟前
使用 Spring AI 打造企业级 RAG 知识库第一部分:核心基础
java·人工智能·spring
cyber_两只龙宝22 分钟前
【Oracle】Oracle之DQL中SELECT的基础使用
linux·运维·服务器·数据库·云原生·oracle
老苏畅谈运维23 分钟前
Oracle 在线表重定义:将非分区表转换为分区表的最佳实践
数据库·oracle