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日

相关文章

  • JavaWeb实现文件上传功能详解

    JavaWeb实现文件上传功能详解 1. 介绍 文件上传是Web应用中常用的一种功能,例如用户上传头像或者附件。本文将介绍JavaWeb中文件上传的实现方式。 2. 实现方式 2.1 方式一:使用第三方库commons-fileupload 添加依赖 在Maven中使用以下依赖添加commons-fileupload: <dependency> …

    Java 2023年5月19日
    00
  • SpringBoot集成MyBatis的分页插件PageHelper实例代码

    下面就为大家详细讲解“SpringBoot集成MyBatis的分页插件PageHelper实例代码”的完整攻略。 简介 在使用 MyBatis 进行数据库操作时,MySQL主要的限制在于分页查询。但是 Mybatis 配合 PageHelper 便可以轻松解决这个问题。本文将介绍如何在 SpringBoot 中使用 MyBatis 分页插件 PageHelp…

    Java 2023年6月16日
    00
  • Java初学者常问的问题(推荐)

    Java初学者常问的问题(推荐) 1. Java是什么?为什么要学习Java? Java是一种跨平台的面向对象编程语言,在计算机科学领域中应用广泛。学习Java可以让你掌握面向对象编程的基础概念,这对于日后的编程工作非常有帮助。Java也是许多大型企业和开源项目中常用的编程语言之一,掌握Java可以让你获得更多的就业机会。 2. Java有哪些基础概念? J…

    Java 2023年5月23日
    00
  • java BigDecimal精度丢失及常见问分析

    下面是对于“java BigDecimal精度丢失及常见问题分析”的完整攻略。 1. 背景 在Java中进行精确浮点数计算,常常使用BigDecimal类。BigDecimal类有很强的精度和舍入模式控制能力,但是如果不注意使用规范,也会出现与浮点数相似的精度问题:丢失精度。 2. 问题分析 2.1 浮点数精度问题 Java中的浮点数精度问题主要由二进制浮点…

    Java 2023年5月27日
    00
  • 浅析Java常用API(Scanner,Random)匿名对象

    那么让我们来浅析Java常用API(Scanner,Random)匿名对象的攻略。 什么是匿名对象 在Java中,我们可以通过new 关键字创建一个对象,然后用这个对象调用它所对应的方法。而匿名对象就是使用对象名称时,省略了对象的创建过程,直接调用对象方法或属性。称之为匿名对象。 匿名对象的优缺点 匿名对象的优点是可以方便快速的创建出对象,并且可以一次性调用…

    Java 2023年5月26日
    00
  • IDEA 2019.2.2配置Maven3.6.2打开Maven项目出现 Unable to import Maven project的问题

    下面是针对 “IDEA 2019.2.2配置Maven3.6.2打开Maven项目出现 Unable to import Maven project的问题”的攻略: 问题背景 在使用 IntelliJ IDEA 2019.2.2 配置 Maven 3.6.2 并打开 Maven 项目时,存在无法导入 Maven 项目的问题。 解决方案 第一步:确认 Mave…

    Java 2023年5月20日
    00
  • spring boot 使用utf8mb4的操作

    下面是详细讲解 “spring boot 使用utf8mb4的操作”的完整攻略: 什么是utf8mb4? UTF-8 是一种针对Unicode的可变长度字符编码,也是一种前缀码。UTF-8使用一至四个字节编码UNICODE字符。在UTF-8中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节,而emoji表情等一些非常规的字符则会被编码为四个字节。然…

    Java 2023年6月16日
    00
  • Spring+Vue整合UEditor富文本实现图片附件上传的方法

    我来详细讲解一下“Spring+Vue整合UEditor富文本实现图片附件上传的方法”的完整攻略。 1. 简介 此攻略将介绍如何在Spring和Vue框架里整合UEditor富文本编辑器,并且实现图片附件的上传与展示。UEditor是由百度开发的一款富文本编辑器,可以轻松实现类似Word的文本编辑功能。 2. 整合UEditor 2.1 引入UEditor …

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