美文网首页
多线程-join

多线程-join

作者: QQ_33e9 | 来源:发表于2019-03-02 14:18 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/wiveuqtx.html