读书人

说一上多线程中用到的join

发布时间: 2012-09-07 10:38:15 作者: rapoo

说一下多线程中用到的join

? ? ?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是一样的吗?

?

读书人网 >编程

热点推荐