JAVA多线程之方法 JOIN详解及实例代码

JAVA多线程之方法 JOIN详解及实例代码

什么是JOIN方法?

Java多线程中,Join方法是Thread类提供的一种方法。用于主线程等待子线程执行完毕后再执行,即实现主线程对于子线程的加入(join)操作。

JOIN方法的语法

在Java多线程中,join方法的语法如下:

public final void join() throws InterruptedException

方法说明:

该方法会使当前主线程处于阻塞状态,等待子线程执行完毕后才能继续执行。

JOIN方法的作用

在JAVA多线程中,当一个线程执行过程中调用另一个线程的join方法时,调用线程将被阻塞,直到被调用线程执行完。阻塞的线程会被加入到被调用线程的等待队列中。

JOIN方法的实例代码

下面我们来看一下join方法的实例代码:

public class JoinDemo implements Runnable {

    @Override
    public void run() {
        System.out.println("线程" + Thread.currentThread().getName() + "开始执行");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("线程" + Thread.currentThread().getName() + "执行完毕");
    }

    public static void main(String[] args) throws InterruptedException {
        System.out.println("主线程开始执行");
        Thread thread1 = new Thread(new JoinDemo(), "Thread-1");
        Thread thread2 = new Thread(new JoinDemo(), "Thread-2");
        thread1.start();
        thread2.start();

        thread1.join();
        thread2.join();

        System.out.println("主线程执行完毕");
    }
}

代码中,我们创建了两个线程thread1和thread2,并使它们同时开始执行。由于在主线程中我们使用了join方法,所以主线程必须等待thread1和thread2都执行完之后才能继续执行。

输出结果:

主线程开始执行
线程Thread-1开始执行
线程Thread-2开始执行
线程Thread-1执行完毕
线程Thread-2执行完毕
主线程执行完毕

示例说明:

对于该示例代码,我们创建了两个线程,在它们开始执行后,我们调用了join方法,这样主线程就会等待这两个线程执行完毕后再执行。通过实际输出的结果,我们也可以看到,在两个子线程执行完毕之后,主线程才完成了执行。

JOIN方法的另一种示例代码

下面再来看一个JOIN方法的示例代码:

public class JoinDemo2 implements Runnable {

    private int num;

    public JoinDemo2(int num) {
        this.num = num;
    }

    @Override
    public void run() {
        System.out.println("线程" + Thread.currentThread().getName() + "开始执行");
        try {
            Thread.sleep(100 * num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("线程" + Thread.currentThread().getName() + "执行完毕");
    }

    public static void main(String[] args) throws InterruptedException {
        System.out.println("主线程开始执行");
        Thread[] threads = new Thread[10];
        for (int i = 0; i < threads.length; i++) {
            threads[i] = new Thread(new JoinDemo2(i), "Thread-" + (i + 1));
            threads[i].start();
        }

        for (Thread thread : threads) {
            thread.join();
        }

        System.out.println("主线程执行完毕");
    }
}

代码中,我们创建了10个线程并使它们开始执行。由于我们使用了join方法,所以主线程必须等待10个线程都执行完成后才能继续执行。

输出结果:

主线程开始执行
线程Thread-1开始执行
线程Thread-2开始执行
...
线程Thread-10开始执行
线程Thread-0执行完毕
线程Thread-1执行完毕
...
线程Thread-9执行完毕
主线程执行完毕

示例说明:

对于该示例代码,我们创建了10个线程,并启动它们的执行。通过结合使用join方法,我们可以看到,在所有线程都执行完成之后,主线程才能够完成执行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA多线程之方法 JOIN详解及实例代码 - Python技术站

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

相关文章

  • IDEA工程运行时总是报xx程序包不存在实际上包已导入(问题分析及解决方案)

    问题背景 在使用 JetBrains 旗下的 Java IDE 工具 IntelliJ IDEA 进行项目开发时,有时会遇到一个问题:在导入了某些依赖库后,运行程序时提示某些类找不到或某些程序包不存在,但实际上这些包已经被正确导入了。 问题原因 这是因为 IntelliJ IDEA 默认会在编译、运行时根据 Maven、Gradle 或自己所设置的依赖路径自…

    Java 2023年5月26日
    00
  • Java进阶学习:jar打包详解

    Java进阶学习:jar打包详解 什么是jar包? Java Archive文件,简称jar包,是Java中一种用于打包、压缩Java类文件、图片、配置文件等资源的标准格式。它能够将多个相关的Java类和其它文件捆绑成一个独立的可执行程序,方便部署和传输。 jar包可以用于多种场合,比如: 将代码打包成jar文件,以便分发代码,并方便其他程序调用 建立插件体…

    Java 2023年5月19日
    00
  • Java前后端的JSON传输方式(前后端JSON格式转换)

    下面是针对Java前后端的JSON传输方式以及前后端JSON格式转换的完整攻略。 一、JSON格式简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON格式常用于Web应用程序之间的数据传输。 1.1 JSON格式规则 在JSON中,数据格式采用键值对的形式,键值…

    Java 2023年5月26日
    00
  • Java内部类原理、概述与用法实例详解

    Java内部类原理、概述与用法实例详解 Java中的内部类是指嵌套在另外一个类内部的类,它们提供了更好的封装和代码组织方式。本文将详细讲解Java内部类的原理、概述和用法实例,并提供两个示例来说明其使用和优势。 内部类原理 Java中的内部类实际上是一种成员类,它与其他成员变量和成员方法一样隶属于其外围类,并可以访问外围类的私有数据和方法,甚至可以访问到其外…

    Java 2023年5月23日
    00
  • Java JSONObject与JSONArray对象案例详解

    Java JSONObject与JSONArray对象案例详解 在Java中,我们可以使用JSONObject和JSONArray对象来解析和构建JSON格式的数据。本文将详细讲解如何在Java中使用这两个对象。 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,适用于各种编程语言。它基于JavaS…

    Java 2023年5月26日
    00
  • IE脚本错误怎么办 网页脚本错误解决妙招

    为了解决IE浏览器的脚本错误问题,我们需要执行以下几个步骤: 第一步:定位错误 当IE浏览器打开网页时,如果遇到脚本错误,通常会出现一个弹窗提示,里面会显示错误的行号和错误信息。我们可以利用这些信息来定位错误。 第二步:检查代码 定位到错误后,我们需要仔细检查代码,找出错误的原因。通常情况下,脚本错误可能是由于变量未声明、语法问题、DOM元素不存在等原因导致…

    Java 2023年5月23日
    00
  • SpringBoot整合Mybatis实现多数据源配置与跨数据源事务实例

    关于“SpringBoot整合Mybatis实现多数据源配置与跨数据源事务实例”的完整攻略,我们可以分以下几个步骤来进行讲解: 添加依赖:在 pom.xml 中添加多数据源、 Mybatis 等相关依赖,例如: <!– Spring Boot 多数据源依赖 –> <dependency> <groupId>org.sp…

    Java 2023年6月3日
    00
  • AngularJS实现的生成随机数与猜数字大小功能示例

    实现AngularJS生成随机数和猜数字大小功能的示例,需要遵循以下几个步骤: 步骤1:创建页面 创建一个HTML页面,并导入AngularJS库文件。在页面中创建两个按钮,分别用于生成随机数和猜测数字大小。同时,为了显示随机数和猜测结果,还需要添加两个文本框。 <!DOCTYPE html> <html ng-app> <he…

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