多线程查询数据库
时间: 2023-06-29 19:19:14 浏览: 119
多线程同时查询同一数据库对比
多线程查询数据库可以提高查询效率,提高系统的性能和响应速度。以下是一个简单的多线程查询数据库的示例:
```java
public class DatabaseQuery {
private static final int THREAD_COUNT = 5;
private static final ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT);
public static void main(String[] args) throws InterruptedException, ExecutionException {
List<Future<?>> futures = new ArrayList<>();
for (int i = 1; i <= THREAD_COUNT; i++) {
final int threadNum = i;
Future<?> future = executorService.submit(() -> {
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456")) {
String sql = "SELECT * FROM user WHERE id = ?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setInt(1, threadNum);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
});
futures.add(future);
}
for (Future<?> future : futures) {
future.get();
}
executorService.shutdown();
}
}
```
在上面的代码中,我们创建了一个固定大小的线程池,并使用 `submit()` 方法提交了多个查询任务。每个线程都会查询数据库中 `user` 表中的一条数据,并输出其 `name` 字段的值。在主线程中,我们等待所有任务完成后关闭线程池。
需要注意的是,在多线程查询数据库时,需要确保连接对象(Connection)和语句对象(Statement/PreparedStatement)是线程安全的。通常情况下,我们可以使用线程池来管理连接对象,每个线程都从线程池中获取连接对象,使用完后将其归还到连接池中。这样可以避免频繁地创建和销毁连接对象,提高系统的性能和稳定性。
阅读全文