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日

相关文章

  • Spring @DateTimeFormat日期格式化时注解场景分析

    我们来详细讲解一下“Spring @DateTimeFormat日期格式化时注解场景分析”的完整攻略。 标题 Spring @DateTimeFormat日期格式化时注解场景分析 简介 Spring框架提供了许多用于将前端页面提交的数据绑定到控制器方法中的注解。在这些注解中,我们可以使用@DateTimeFormat将String类型的日期时间数据绑定到ja…

    Java 2023年6月2日
    00
  • Java Apache POI报错“IndexOutOfBoundsException”的原因与解决办法

    “IndexOutOfBoundsException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 索引错误:如果索引不正确,则可能会出现此异常。例如,可能会尝试访问不存在的行或列。 以下是两个实例: 例1 如果索引不正确,则可以尝试使用正确的索引以解决此问题。例如,在Java中,可以使用以下代码: FileInputStrea…

    Java 2023年5月5日
    00
  • Hibernate实现悲观锁和乐观锁代码介绍

    关于Hibernate实现悲观锁和乐观锁的代码介绍,我们可以分别针对不同的锁机制进行讲解。 一、悲观锁 悲观锁机制在操作数据的时候会先将数据锁定,避免其他线程对该数据的访问和修改。Hibernate提供了两种方式实现悲观锁:使用数据库相关功能实现和使用Hibernate API实现。 1.使用数据库相关功能实现悲观锁 需要在sql语句中使用 for upda…

    Java 2023年5月20日
    00
  • jsp页面中插入css样式的三种方法总结

    下面将详细讲解jsp页面中插入css样式的三种方法总结。 方法一:直接在jsp页面中使用style标签 在jsp页面的标签中添加 标签,然后直接在其中编写CSS样式即可。 示例: <%@ page contentType="text/html;charset=UTF-8" language="java" %&gt…

    Java 2023年6月15日
    00
  • Java 从网上下载文件的几种方式实例代码详解

    Java 从网上下载文件的几种方式实例代码详解 在Java编程中,有时候需要从网上下载文件,比如下载图片、音频、视频等资源文件。本文将详细讲解Java 从网上下载文件的几种方式,希望可以帮助大家实现这个需求。 1.使用URL类下载文件 使用URL类可以轻松地实现从网上下载文件。实现的过程如下: public static void downloadFile(…

    Java 2023年5月19日
    00
  • struts2自定义拦截器的示例代码

    下面是关于“struts2自定义拦截器的示例代码”的完整攻略。 什么是Struts2自定义拦截器? 在Struts2中,拦截器(Interceptor)是用于拦截请求和响应的组件。Struts2框架中自带了许多默认的拦截器,如TokenInterceptor、ValidationInterceptor、ParamsInterceptor等。除此之外,我们还可…

    Java 2023年5月20日
    00
  • 详解 Java中日期数据类型的处理之格式转换的实例

    下面是详解Java中日期数据类型的处理之格式转换的实例的完整攻略。 前言 在Java中,常用的日期数据类型有java.util.Date和java.time.LocalDateTime等。在处理日期时,我们有时需要把日期按照一定的格式进行转换,例如将2022-01-01转换成2022年01月01日。本文将对Java中日期格式转换进行详细讲解,并提供具体的代码…

    Java 2023年5月20日
    00
  • 微信小程序微信登录的实现方法详解(JAVA后台)

    下面是详细的攻略: 背景介绍 微信小程序微信登录是指用户可以通过微信账号快速登录小程序,无需再次注册账号。实现微信登录的关键在于后台服务器实现微信的登录认证功能。本文将详细讲解如何在Java后台实现微信登录的功能。 实现方法 实现微信登录功能的具体步骤如下: 1.前端页面添加微信登录按钮 <button type="primary"…

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