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方法结束了
  • 相关阅读:
    docker部署archery
    System系统类
    多变量的梯度下降
    matlab基础语法
    代价函数
    文件操作
    python集合关系
    python日记(四)字典的常见用法
    python日记(三)常用字符串用法
    python日记(二)购物车程序
  • 原文地址:https://www.cnblogs.com/da-peng/p/9999062.html
Copyright © 2011-2022 走看看