zoukankan      html  css  js  c++  java
  • 加入一个线程: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

      

  • 相关阅读:
    fafu 1231 dp(线段树优化dp)
    OUTLOOK+VBA 备份邮件到GMAIL
    心灵的程序:佛学与计算机
    建议增加编辑器插件“自动排版”
    高效演讲:简单四步走
    找呀找呀找地铁
    为什么你总是烦?
    变形金刚之雷曼疯狂兔子:抽水马桶变身
    客观:别人的主观
    用VBSCRIPT朗读文本
  • 原文地址:https://www.cnblogs.com/qilong853/p/5911575.html
Copyright © 2011-2022 走看看