多线程-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;

        }

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 5,171评论 0 23
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,008评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,517评论 1 15
  • 一个人最好的生活方式,是思想独立,有自己喜欢做的事情! 此外,就是好好爱自己。如果我们把爱寄托在别人身上。...
    墨迹孙阅读 576评论 1 2
  • 第三部说实话,我不愿意再重新看,也许因为我不想接受现实。 我觉得如果你要追求浪漫的效果,第三部其实也可以直接不用看...
    妮可可阅读 753评论 1 1