Java多线程–让主线程等待所有子线程执行完毕在执行

如果想在Java中实现主线程等待所有子线程执行完毕再执行,可以使用以下步骤:

1. 定义多个子线程

定义具体的子线程类,重写run方法实现具体的任务逻辑。以下是一个简单的示例:

class MyThread implements Runnable {
    private String name;

    public MyThread(String name) {
        this.name = name;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(name + "执行第" + i + "次任务");
        }
    }
}

2. 创建多个子线程

在主线程中创建多个子线程。以下是一个示例,创建了3个子线程:

public static void main(String[] args) {
    Thread thread1 = new Thread(new MyThread("子线程1"));
    Thread thread2 = new Thread(new MyThread("子线程2"));
    Thread thread3 = new Thread(new MyThread("子线程3"));

    // 启动多个子线程
    thread1.start();
    thread2.start();
    thread3.start();   
}

3. 等待多个子线程执行完毕

使用join方法等待多个子线程执行完毕。在主线程中调用子线程的join方法,以阻塞主线程,直到该子线程执行完毕。以下是一个示例:

public static void main(String[] args) {
    Thread thread1 = new Thread(new MyThread("子线程1"));
    Thread thread2 = new Thread(new MyThread("子线程2"));
    Thread thread3 = new Thread(new MyThread("子线程3"));

    // 启动多个子线程
    thread1.start();
    thread2.start();
    thread3.start();

    try {
        // 等待子线程执行完毕
        thread1.join();
        thread2.join();
        thread3.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    // 所有子线程执行完毕后执行的代码
    System.out.println("所有子线程执行完毕");
}

另外一个示例是使用线程池来实现多线程。以下是一个示例:

1. 定义任务类

定义具体的任务类,实现Runnable接口,具体的任务逻辑实现在run方法中。以下是一个示例:

class MyTask implements Runnable {
    private String name;

    public MyTask(String name) {
        this.name = name;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(name + "执行第" + i + "次任务");
        }
    }
}

2. 使用线程池执行任务

使用ExecutorService创建一个线程池,调用submit方法提交任务。使用invokeAll方法提交多个任务,该方法会阻塞当前线程,直到所有任务执行完毕。以下是一个示例:

public static void main(String[] args) {
    ExecutorService executorService = Executors.newFixedThreadPool(3);

    List<MyTask> tasks = new ArrayList<>();
    tasks.add(new MyTask("任务1"));
    tasks.add(new MyTask("任务2"));
    tasks.add(new MyTask("任务3"));

    try {
        // 提交多个任务
        executorService.invokeAll(tasks);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    // 所有任务执行完毕后执行的代码
    System.out.println("所有任务执行完毕");

    // 关闭线程池
    executorService.shutdown();
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java多线程–让主线程等待所有子线程执行完毕在执行 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • MyBatis详解如何实现Dao层接口

    下面就是“MyBatis详解如何实现Dao层接口”的完整攻略。 什么是MyBatis MyBatis是一款优秀的持久层框架,它对JDBC的操作数据库的过程进行了封装,简化了操作的流程。MyBatis具有以下特点: 简单易学,上手快 灵活性高,可以通过XML或注解的方式进行SQL语句编写 扩展性强,可以通过自定义TypeHandler、Interceptor等…

    Java 2023年5月20日
    00
  • 解决Spring Security中AuthenticationEntryPoint不生效相关问题

    当我们在使用Spring Security的时候,有时候可能会遇到AuthenticationEntryPoint不会被自动调用的问题。这个问题的原因可能是我们自定义的AuthenticationEntryPoint没有被正确配置或者是我们没有理解AuthenticationEntryPoint的工作原理。接下来我将为大家提供一个完整攻略,以解决Spring…

    Java 2023年6月3日
    00
  • perl的格式化(Format)报表输出实现代码

    要在Perl中实现格式化报表输出,我们可以使用Perl的格式化(Format)功能。通过定义格式模板,我们可以指定报表的多种输出形式,例如表格、列宽对齐等。下面是实现格式化报表输出的完整攻略: 步骤1:定义格式模板 我们可以使用Perl中的format指令定义格式模板,格式模板包含多个格式控制符来指定报表的布局、对齐、填充等属性。下面是一个示例格式模板: f…

    Java 2023年6月15日
    00
  • JAVA文件扫描(递归)的实例代码

    下面是详细的讲解 “JAVA文件扫描(递归)的实例代码” 的攻略。 目标 我们的目标是编写一个可以在指定目录下递归查找文件和文件夹的 Java 代码。我们将使用 File 类和递归的方法来实现这一目标。 实现过程 步骤一:创建一个 Java 类 首先,我们需要创建一个 Java 类来编写代码。您可以选择使用您最喜欢的 Java IDE 编辑器,或者在命令行中…

    Java 2023年5月20日
    00
  • Apache Log4j2 报核弹级漏洞快速修复方法

    下面我来为您讲解“Apache Log4j2报核弹级漏洞快速修复方法”的完整攻略。 一、背景介绍 在2021年12月8日,美国网络安全局 (NSA) 警告公众一种名为 Log4Shell 的漏洞,该漏洞存在于 Log4j 2.x 中,攻击者可通过该漏洞远程执行代码,甚至可以获得系统控制权。由于该漏洞的严重性,被称为“核弹级漏洞”。 二、修复方法 1.更新 L…

    Java 2023年6月2日
    00
  • Spring常用配置及解析类说明

    下面是“Spring常用配置及解析类说明”的详细攻略。 1. Spring常用配置 1.1 XML配置 Spring框架最初是以XML配置为主的,XML配置的方式包括声明bean和对bean进行依赖注入两个方面。 1.1.1 声明bean 在XML配置文件中,声明bean的方式如下: <bean id="beanId" class=…

    Java 2023年5月19日
    00
  • Java对象布局(JOL)实现过程解析

    Java对象布局(JOL)实现过程解析 JOL简介 Java对象布局(JOL)是一款用于分析Java对象内存布局的工具。通过使用JOL,可以知道Java对象的内存结构、大小、对齐方式、是否是线程安全的等信息。JOL可以根据不同的JVM实现,提供与JVM相关的内存分布、布局信息。 JOL是由OpenJDK项目的Java人员负责维护和支持的高度可靠的工具。 安装…

    Java 2023年5月26日
    00
  • mybatis中resulthandler的用法

    Mybatis是一款优秀的ORM框架,它能够帮助程序员快速、简单地完成Java对象与关系数据库的互相映射。它提供了各种查询方式,其中一种比较有特色的查询方式就是使用ResultHandler进行分页查询,那么下面将详细介绍Mybatis中Resulthandler的用法。 1. Resulthandler简介 Mybatis中的Resulthandler相当…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部