zoukankan      html  css  js  c++  java
  • (三)等待线程执行终止的join方法

    Java并发编程之美->读书笔记

    在项目实践中经常会遇到一个场景,就是需要等待某几件事情完成后才能继续往下执行,比如
    多个线程加载资源,需要等待多个线程全部加载完毕再汇总处理。 Thread 类中有
    一个 join 方法就可以做这个事情,前面介绍的等待通知方法是Object类中的方法,而join
    方法 Thread类直接提供的。 join是无参且返回值为 void 的方法。下面来看一个简单
    的例子。

    package thread;
    
    /**
     * @description:
     * @author: lv
     * @time: 2020/7/28 15:13
     */
    public class Demo {
        public static void main(String[] args) throws InterruptedException{
            Thread threadOne = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("child threadOne over");
                }
            });
    
            Thread threadTwo = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("child threadTwo over");
                }
            });
    
            threadOne.start();
            threadTwo.start();
    
            //等待子线程执行完毕返回
            threadOne.join();
            threadTwo.join();
        }
    }
    

    如上代码在主线程里面启动了两个子线程,然后分别调用了它 join方法,那
    么主线程首先会在调用threadOne.join方法后被阻塞,等待threadOne执行完毕后返回。
    threadOne执行完毕后threadOne.join就会返回,然后主线程调用threadTwo.join方法后
    再次被阻塞,等待threadTwo执行完毕后返回。这里只是为了演示join方法的作用,在这
    种情况下使用后面会讲到的CountDownLatch是个不错的选择
    另外,线程A调用线程B的join方法后会被阻塞,当其他线程调用了线程A的
    interrupt方法中断了线程A时,线程A会抛出InterruptedException异常而返回。

      

  • 相关阅读:
    Linux内核tracepoints
    Linux 设备驱动的固件加载
    Android HIDL HAL 接口定义语言详解
    Android HIDL 详解
    Android各版本对应的SDK版本
    ifconfig调用过程
    Input系统—启动篇
    Linux下2号进程的kthreadd--Linux进程的管理与调度
    rest_init函数分析(续)
    【python】-常用模块2
  • 原文地址:https://www.cnblogs.com/lvchengda/p/13390942.html
Copyright © 2011-2022 走看看