java 多线程读取mysql
时间: 2023-07-05 08:31:40 浏览: 168
在 Java 中实现多线程读取 MySQL 的方法有很多种,以下是其中一种实现方法:
1. 创建一个连接池,通过连接池获取多个数据库连接。
2. 创建一个线程池,通过线程池管理多个线程。
3. 在每个线程中获取一个数据库连接,通过连接执行相应的 SQL 语句。
4. 在主线程中等待所有子线程执行完毕,并进行结果的合并。
下面是一段示例代码:
```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadedDBQuery {
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";
private static final String USER = "username";
private static final String PASS = "password";
private static final int THREAD_COUNT = 10;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
for (int i = 0; i < THREAD_COUNT; i++) {
executor.execute(new QueryTask());
}
executor.shutdown();
while (!executor.isTerminated()) {
Thread.yield();
}
// 合并结果
// mergeResults();
}
private static class QueryTask implements Runnable {
@Override
public void run() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
String sql = "SELECT * FROM mytable";
rs = stmt.executeQuery(sql);
while (rs.next()) {
// 处理结果
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
```
在这个示例代码中,我们通过 `ExecutorService` 来创建一个线程池,通过 `newFixedThreadPool` 方法指定线程数。然后,我们循环创建多个线程,并将它们提交到线程池中执行。在每个线程中,我们通过 `DriverManager` 来获取一个数据库连接,并执行相应的 SQL 语句。最后,在主线程中等待所有子线程执行完毕,并进行结果的合并。
阅读全文