码迷,mamicode.com
首页 > 编程语言 > 详细

多线程--Thread.join方法

时间:2019-01-08 15:27:10      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:参数   执行   style   throw   long   bsp   结束   interrupt   bre   

在Thread类的Api中,Join的作用是让当前线程等待目标线程结束之后才继续执行。

分别是


public final synchronized void join(long millis, int nanos); //使当前线程等待目标线程millis 毫秒 ,nanos纳秒之后,当前线程继续执行。

public final synchronized void join(long millis); //使当前线程等待目标线程millis 毫秒,当前线程继续执行。

public final void join(); //使当前线程时刻检测目标线程,直到目标线程执行完成,再执行当前线程。

 

下面我们主要查看下 public final synchronized void join(long millis) 的源码:

    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");
        }

        if (millis == 0) {
      //如果等待的毫秒数为0,则通过Api, isAlive()时刻检测目标线程是否存活,若存活则继续等待。
while (isAlive()) { wait(0); } } else { while (isAlive()) {
        //判断目标线程是否存活,若存活,则等待mills毫秒,然后跳出join,当前线程执行。
long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }

从源码可以看出,就是当前线程在判断目标线程是否存活,如果存活根据参数的值,是无限等待到目标线程结束才执行当前线程,还是执行一段时间就开始执行当前线程。

public final void join();底层调用Join(0);实现无限等待知道目标线程结束。
 

多线程--Thread.join方法

标签:参数   执行   style   throw   long   bsp   结束   interrupt   bre   

原文地址:https://www.cnblogs.com/wenq001/p/10238207.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!