论坛首页 编程语言技术论坛

说一下多线程中用到的join

浏览 1240 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-01-04  

     join:调用线程等待被调用线程执行结束方可执行下面的操作,使用的场景如下,主线程需要调用一个线程A去异步执行一个操作,同时主线程必须等到线程A执行完毕才能执行,join就派上用场了。

    具体实现也简单,通过一个线程来判断线程A时候执行完成,用isAlive()判断,如果依然在执行(存活),调用线程A的wait()使主线程等待。

 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) {
            while (isAlive()) {
                wait(0);//如果指定时间,则等到线程A执行结束为止
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
               //等待指定的时间
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }
 

    isALive()是个navite方法,怎么判断线程是否alive,是否是执行完run方法就结束了alive为false呢,同时线程alive为false后,就能唤醒wait阻塞的线程,效果和notify是一样的吗?

 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics