Java中如何确保在多线程情况下,所有线程都完成再继续执行任务

您所在的位置:网站首页 java线程池中的线程执行完毕怎么办 Java中如何确保在多线程情况下,所有线程都完成再继续执行任务

Java中如何确保在多线程情况下,所有线程都完成再继续执行任务

2024-07-04 18:40| 来源: 网络整理| 查看: 265

1.awaitTermination

        awaitTermination是ExecutorService自带的方法,用来确保所有的线程任务都执行完毕。

awaitTermination方法会阻塞当前线程,直到线程池中的所有任务都执行完毕或者超过指定的超时时间。如果线程池中的任务都执行完毕,则返回true,否则返回false。如果在指定的超时时间内没有等到线程池中的任务执行完毕,则会返回false。

awaitTermination方法的声明如下:

boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;

其中,timeout参数表示超时时间,unit参数表示超时时间的单位。

例如下使用线程池来执行100个不同的 SQL 语句,将查询结果存储在一个 List 集合中,具体实现如下:

定义一个 Runnable 接口的实现类,用来执行 SQL 查询任务,该类需要在构造函数中接收 SQL 语句和存储结果的 List 集合对象。

public class SqlQueryTask implements Runnable {     private final String sql;     private final List resultList;     public SqlQueryTask(String sql, List resultList) {         this.sql = sql;         this.resultList = resultList;     }       @Override     public void run() {         // 执行 SQL 查询,并将结果存储在 resultList 中         Connection conn = null;         Statement stmt = null;         ResultSet rs = null;         try {             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");             stmt = conn.createStatement();             rs = stmt.executeQuery(sql);             while (rs.next()) {                 Map rowMap = new HashMap();                 // 获取查询结果的每一列的名称和值,并将其存储在 Map 中                 ResultSetMetaData metaData = rs.getMetaData();                 int count = metaData.getColumnCount();                 for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3