zoukankan      html  css  js  c++  java
  • join()

    代码:

    package concurrent._join;
    
    public class Demo {
        public static void main(String[] args) throws InterruptedException {
            ThreadA threadA = new ThreadA();
            ThreadB threadB = new ThreadB(threadA);
    
            String threadName = Thread.currentThread().getName();
            System.out.println(threadName + "已经启动了");
            threadB.run();
    
    //        threadA.join();
    //        System.out.println(threadName + "等待子线程的join方法结束了");
    
    
            threadB.join();
            System.out.println(threadName + "等待子线程的join方法结束了");
    
        }
    }
    
    class ThreadA extends  Thread{
        public ThreadA(){
            super("ThreadA");
        }
        @Override
        public void run() {
            String threadName = this.getName();
            System.out.println(threadName + "已经启动了");
            for(int i = 0 ; i < 5 ; i++){
                System.out.println(threadName + "开始第" + i + "次的睡眠");
                try {
    
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(threadName + "已经结束了");
    
        }
    }
    
    
    class ThreadB extends  Thread{
        Thread thread;
        public ThreadB(Thread thread){
            super("ThreadB");
            this.thread = thread;
        }
        @Override
        public void run() {
            String threadName = this.getName();
            System.out.println(threadName + "已经启动了");
            try {
                thread.start();
                thread.join();
                System.out.println(threadName + "等待子线程的join方法结束了");
    
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(threadName + "已经结束了");
    
        }
    }

    结果:

    main已经启动了
    ThreadB已经启动了
    ThreadA已经启动了
    ThreadA开始第0次的睡眠
    ThreadA开始第1次的睡眠
    ThreadA开始第2次的睡眠
    ThreadA开始第3次的睡眠
    ThreadA开始第4次的睡眠
    ThreadA已经结束了
    ThreadB等待子线程的join方法结束了
    ThreadB已经结束了
    main等待子线程的join方法结束了

    修改代码:

    package concurrent._join;
    
    public class Demo {
        public static void main(String[] args) throws InterruptedException {
            ThreadA threadA = new ThreadA();
            ThreadB threadB = new ThreadB(threadA);
    
            String threadName = Thread.currentThread().getName();
            System.out.println(threadName + "已经启动了");
            threadA.start();
            threadB.start();
    //        threadA.join();
    //        System.out.println(threadName + "等待子线程的join方法结束了");
    
    
            threadB.join();
            System.out.println(threadName + "等待子线程的join方法结束了");
    
        }
    }
    
    class ThreadA extends  Thread{
        public ThreadA(){
            super("ThreadA");
        }
        @Override
        public void run() {
            String threadName = this.getName();
            System.out.println(threadName + "已经启动了");
            for(int i = 0 ; i < 5 ; i++){
                System.out.println(threadName + "开始第" + i + "次的睡眠");
                try {
    
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(threadName + "已经结束了");
    
        }
    }
    
    
    class ThreadB extends  Thread{
        Thread thread;
        public ThreadB(Thread thread){
            super("ThreadB");
            this.thread = thread;
        }
        @Override
        public void run() {
            String threadName = this.getName();
            System.out.println(threadName + "已经启动了");
            try {
    //            thread.start();
                thread.join();
                System.out.println(threadName + "等待子线程的join方法结束了");
    
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(threadName + "已经结束了");
    
        }
    }

    结果:

    main已经启动了
    ThreadA已经启动了
    ThreadA开始第0次的睡眠
    ThreadB已经启动了
    ThreadA开始第1次的睡眠
    ThreadA开始第2次的睡眠
    ThreadA开始第3次的睡眠
    ThreadA开始第4次的睡眠
    ThreadA已经结束了
    ThreadB等待子线程的join方法结束了
    ThreadB已经结束了
    main等待子线程的join方法结束了
  • 相关阅读:
    【洛谷4005】小 Y 和地铁(搜索)
    【洛谷4348】[CERC2015] Cow Confinement(扫描线+线段树优化DP)
    【洛谷7016】[CERC2013] Captain Obvious and the Rabbit-Man(手动高斯消元)
    【洛谷3438】[POI2006] ZAB-Frogs(斜率优化)
    【洛谷3426】[POI2005] SZA-Template(KMP)
    【洛谷5157】[USACO18DEC] The Cow Gathering P(拓扑)
    【洛谷5155】[USACO18DEC] Balance Beam P(期望+凸壳)
    【洛谷5204】[USACO19JAN] Train Tracking 2 P(DP)
    【CF757F】Team Rocket Rises Again(最短路图+拓扑)
    【LOJ3038】「JOISC 2019 Day3」穿越时空 Bitaro(线段树)
  • 原文地址:https://www.cnblogs.com/da-peng/p/9999062.html
Copyright © 2011-2022 走看看