深入浅出Java多线程(1)-方法join - 编程入门网
f <code>0</code> means to wait forever.
*
* @param millis the time to wait in milliseconds.
* @exception InterruptedException if any thread has interrupted
* the current thread. The <i>interrupted status</i> of the
* current thread is cleared when this exception is thrown.
*/
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);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
深入浅出Java多线程(1)-方法join(3)时间:2010-12-09 advincenting其实Join方法实现是通过wait(小提示:Object 提供的方法)。 当main线 程调用t.join时候,main线程会获得线程对象t的锁(wait 意味着拿到该对象的 锁),调用该对象的wait(等待时间),直到该对象唤醒main线程,比如退出后。 这就意味着main 线程调用t.join时,必须能够拿到线程t对象的锁,如果拿 不到它是无法wait的,刚开的例子t.join(1000)不是说明了main线程等待1秒, 如果在它等待之前,其他线程获取了t对象的锁,它等待时间可不就是1毫秒了。 上代码介绍:
在main方法中 通过new ThreadTest(t).start();实例化ThreadTest |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |