多线程-join

join:加入线程,顺序执行。

官方解释:当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行。

即:在main线程中调用子线程的join方法,join方法会挂起main线程,直到子线程结束执行,main线程才会继续执行。

示例:子线程加入main线程,子线程执行后再执行main线程。

public class MyJoinThread extends Thread{

    public void run() {

        System.out.println("I am join thread");

    }

}

public class Main{

        public static void main(String args[]) {

            Thread joinThread = new MyJoinThread();

            try {

              joinThread.start();

                joinThread.join();

            } catch(InterruptedException e) {

                e.printStackTrace();

            }

            System.out.println("I am main  thread");

         }

}

下面是join方法源码:

public final synchronized void join(long millis) throws InterruptedException {

    long base = System.currentTimeMillis();

    long now =0;

    if (millis <0) {

        throw new IllegalArgumentException("timeout value is negative");

    }

    //当timeout为0时,即一直等到子线程执行完毕后再执行主线程

    if (millis ==0) {

        //循环判子线程是否active,子线程是active则让主线程等待

        while (isAlive()) {

            wait(0);

        }

    }

    //当timeout不为0时,即让主线程等待timeout时间后就继续执行

    else {

          //循环判子线程是否active,子线程是active则让主线程等待,如果超出timeout时间,则不再等待

        while (isAlive()) {

            long delay = millis - now;

            if (delay <=0) {

                break;

            }

            wait(delay);

            now = System.currentTimeMillis() - base;

        }

    }

}

你可能感兴趣的:(多线程-join)