加入一个线程: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

  

原文地址:https://www.cnblogs.com/qilong853/p/5911575.html