join方法

  1. 作用
    join()是线程类Thread的方法,官方给出的说明是:
    Waits for this thread to die
    
    等待这个线程结束,也就是说当前线程等待执行了join()方法的线程执行结束后在执行。
    例子:
    public static void main(String[] args) throws     InterruptedException {
        System.out.println("main线程执行。。。。。");
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0;i < 5;i++){
                    System.out.println(i);
                }
            }
        });
        System.out.println("执行下面语句 main线程等待线程t执行。。。。。");
        t.start();
        t.join();
        System.out.println("t执行结束,main线程继续执行。。。。。");
    }
    
    t.join()阻塞了主线程直到t线程执行结束。
    如果没有t.join() 【t执行结束,main线程继续执行。。。。。】可能会在0~5之间输出
  2. 原理
    join()方法源码:


    join源码.png

    可以看出它是用wait方法来实现的,上面例子中当main方法主线程调用线程t时候,main方法获取到了t的对象锁,t调用自身的wait()方法阻塞main线程,直到t结束或者到时间后唤醒主线程继续执行。
    millis为主线程等待t线程的最长执行时间,0则表示等待t线程执行结束。

你可能感兴趣的:(join方法)