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方法结束了
  • 相关阅读:
    Python3 字符串格式化
    TypeError: Object of type 'int32' is not JSON serializable
    论文学习——《Learning to Compose with Professional Photographs on the Web》 (ACM MM 2017)
    python中PIL.Image,OpenCV,Numpy图像格式相互转换
    python 在列表,元组,字典变量前加*号
    python指定概率随机取值 理解np.random.seed()
    论文学习——《Good View Hunting: Learning Photo Composition from Dense View Pairs》
    目标检测知识杂点
    VGG16学习笔记
    python png与jpg的相互转换
  • 原文地址:https://www.cnblogs.com/da-peng/p/9999062.html
Copyright © 2011-2022 走看看