zoukankan      html  css  js  c++  java
  • Java并发编程的艺术笔记(三)——Thread.join()

    t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。它能够使得t.join()中的t优先执行,当t执行完后才会执行其他线程。能够使得线程之间的并行执行变成串行执行。

    在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。

    代码示例:创建10个线程,编号0~9,每个线程调用前一个线程的join()方法,也就是线程0结束了,线程1才能从join()方法中返回,而线程0需要等待main线程结束

    package concurrent;
    
    import java.util.concurrent.TimeUnit;
    
    public class Join {
        public static void main(String[] args) throws Exception {
            Thread previous = Thread.currentThread();
            for (int i = 0; i < 10; i++) {
                // 每个线程拥有前一个线程的引用,需要等待前一个线程终止,才能从等待中返回
                Thread thread = new Thread(new Domino(previous), String.valueOf(i));
                thread.start();
                previous = thread;
            }
            TimeUnit.SECONDS.sleep(5);
            System.out.println(Thread.currentThread().getName() + " terminate.");
        }
    
        static class Domino implements Runnable {
            private Thread thread;
    
            public Domino(Thread thread) {
                this.thread = thread;
            }
    
            public void run() {
                try {
                    thread.join();
                } catch (InterruptedException e) {
                }
                System.out.println(Thread.currentThread().getName() + " terminate.");
            }
        }
    }

    打印结果:

    main terminate.
    0 terminate.
    1 terminate.
    2 terminate.
    3 terminate.
    4 terminate.
    5 terminate.
    6 terminate.
    7 terminate.
    8 terminate.
    9 terminate.

    生产环境慎用,尤其递归情况,会使并行变串行.改用CyclicBarrier,CountDownLatch等。

  • 相关阅读:
    05day02wdt
    05day02pwm
    05day01ioctl_led
    04clock_06semqphore
    04lock_05seqlock
    04lock_03rwlock
    [git]入门-工作区、暂存区、版本库
    [git]入门-创建版本库
    [linux-脚本]shebang(shabang #!)
    [ffmpeg]安装
  • 原文地址:https://www.cnblogs.com/lingluo2017/p/10233409.html
Copyright © 2011-2022 走看看