浏览 1240 次
锁定老帖子 主题:说一下多线程中用到的join
精华帖 (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是一样的吗?
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |