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方法结束了
  • 相关阅读:
    Cesium实现键盘控制镜头效果
    怎么判断一个服务器的服务器性能
    2T以上的盘怎么分区, 利用parted创建 linuxTB硬盘GPT分区
    解压和压缩的简单用法
    关于windows修改远程登录端口的问题
    tomcat启动非常慢;连接oracle数据库失败,jdbc错误日志提示connection reset;测试主机间网络互通及数据库端口都正常
    docker的安装和基础使用
    Centos7 时区的设置
    Day24 中间件 自定义分页 ModelForm 序列化 缓存 信号
    Day22 博客园的构建
  • 原文地址:https://www.cnblogs.com/da-peng/p/9999062.html
Copyright © 2011-2022 走看看