• 加入一个线程:join


      在启动一个线程之后调用该线程的join()方法,会使该线程先执行,该线程执行完成后,再执行调用该线程的线程。

      例如如下的任务:

    public class LiftOff extends Thread {
    
        public LiftOff(){
            taskCount++;// 计数自增
        }
    
        private int        countDown = 3;        // 倒计时数字
    
        private static int taskCount = 0;
    
        private int        id        = taskCount;
    
        @Override
        public void run() {
            while (countDown >= 0) {
                System.out.println("线程编号" + id + "--倒计时" + countDown);
                countDown--;
                if (countDown < 0) {
                    System.out.println(Thread.currentThread() + ":" + id);
                }
            }
        }
    }

      驱动该任务:

    public class Launch {
    
        public static void main(String[] args) {
            Thread t0 = new Thread(new LiftOff());
            Thread t1 = new Thread(new LiftOff());
            Thread t2 = new Thread(new LiftOff());
            t0.start();
            t1.start();
            try {
                t1.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            t2.start();
        }
    }

      程序中利用三个Thread驱动任务,其中t1调用join()方法,输出:

    线程编号0--倒计时3
    线程编号1--倒计时3
    线程编号1--倒计时2
    线程编号1--倒计时1
    线程编号1--倒计时0
    线程编号0--倒计时2
    Thread[Thread-3,5,main]:1
    线程编号0--倒计时1
    线程编号0--倒计时0
    Thread[Thread-1,5,main]:0
    线程编号2--倒计时3
    线程编号2--倒计时2
    线程编号2--倒计时1
    线程编号2--倒计时0
    Thread[Thread-5,5,main]:2

      “线程编号2”的输出总是在t1完全执行完后,也可以在join()中加上超时参数,如果目标线程在该时间到期时还没有结束的话,join()方法也能返回: 

    public class Launch {
    
        public static void main(String[] args) {
            Thread t0 = new Thread(new LiftOff());
            Thread t1 = new Thread(new LiftOff());
            Thread t2 = new Thread(new LiftOff());
            t0.start();
            t1.start();
            try {
                t1.join(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            t2.start();
        }
    }

      输出:

    线程编号0--倒计时3
    线程编号1--倒计时3
    线程编号1--倒计时2
    线程编号1--倒计时1
    线程编号1--倒计时0
    Thread[Thread-3,5,main]:1
    线程编号2--倒计时3
    线程编号2--倒计时2
    线程编号2--倒计时1
    线程编号2--倒计时0
    Thread[Thread-5,5,main]:2
    线程编号0--倒计时2
    线程编号0--倒计时1
    线程编号0--倒计时0
    Thread[Thread-1,5,main]:0

      

  • 相关阅读:
    ubuntu16.04安装jdk1.8(java1.8)
    OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
    Eclipse 的 jsp 页面代码格式化
    php自动加载
    swift 遍历
    swift 赋值判断
    C语言开发环境配置
    C语言之分配
    C语言之指针
    IOS之swift第一课基础代码
  • 原文地址:https://www.cnblogs.com/qilong853/p/5911575.html
Copyright © 2020-2023  润新知