Java 多线程执行查询sql

List<Thread> threadList = strList.stream()
                        .filter(StringUtils::isNotBlank)
                        .map(e -> new Thread(() ->
                              termService.getResult(e,startDate, endDate))) 
                        .collect(Collectors.toList());
                threadList.forEach(Thread::start);
                threadList.forEach(t -> {
                    try {
                        t.join();
                    } catch (InterruptedException e) {
                        throw new CommonException("多线程查询时出错", e);
                    }
                });

strList 的size() 决定启动的线程数,strList中的每个元素都作为参数e传入termService的getResult方法中,可以在getResult方法中将数据库的查询结果放入缓存,方便后续使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多线程执行SQL可以提高查询效率和响应速度。一种常见的做法是使用线程池,通过多线程并发执行SQL语句。示例代码如下: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MultiThreadSQL { private static final String URL = "jdbc:mysql://localhost:3306/test"; private static final String USERNAME = "root"; private static final String PASSWORD = "root"; public static void main(String[] args) { Runnable task = () -> { try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD)) { String sql = "SELECT * FROM users"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("name") + " : " + rs.getInt("age")); } } catch (SQLException e) { e.printStackTrace(); } }; ExecutorService executor = Executors.newFixedThreadPool(10); // 创建线程池 for (int i = 0; i < 100; i++) { executor.execute(task); // 提交任务 } executor.shutdown(); // 关闭线程池 } } ``` 上述代码中,创建了一个固定大小的线程池,每个线程都执行相同的SQL查询任务。在循环中提交100个任务,线程池会自动分配线程来执行任务,当所有任务执行完毕后,关闭线程池。 需要注意的是,多线程执行SQL时需要使用连接池来管理数据库连接。每个线程都需要获取一个连接,使用完毕后释放连接,以避免连接泄漏和性能问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值