Java多线程创建MySQL连接池
时间: 2023-07-28 22:28:56 浏览: 48
可以使用Java多线程创建MySQL连接池,以下是一个简单的实现示例:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MySQLConnectionPool {
private String url;
private String username;
private String password;
private int initialSize;
private int maxActive;
private List<Connection> pool;
public MySQLConnectionPool(String url, String username, String password, int initialSize, int maxActive) {
this.url = url;
this.username = username;
this.password = password;
this.initialSize = initialSize;
this.maxActive = maxActive;
this.pool = new ArrayList<>(maxActive);
init();
}
private void init() {
try {
for (int i = 0; i < initialSize; i++) {
Connection conn = DriverManager.getConnection(url, username, password);
pool.add(conn);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public synchronized Connection getConnection() throws SQLException {
if (pool.isEmpty()) {
if (pool.size() < maxActive) {
Connection conn = DriverManager.getConnection(url, username, password);
pool.add(conn);
} else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return pool.remove(0);
}
public synchronized void releaseConnection(Connection conn) {
pool.add(conn);
notifyAll();
}
}
```
在这个示例中,我们使用一个线程安全的 List 来保存连接池中的连接。在初始化时,我们创建 initialSize 个连接,并将它们添加到连接池中。在 getConnection() 方法中,我们检查连接池是否为空,如果是,则创建新的连接并将其添加到连接池中(但不超过 maxActive)。如果连接池不为空,则返回连接池中的第一个连接。在 releaseConnection() 方法中,我们将连接返回到连接池中,并唤醒等待线程。
需要注意的是,这只是一个简单的示例,实际使用时需要考虑连接池的线程安全性和性能等问题。