Thread join方法的理解

先看一段代碼:

import java.lang.Thread;
public class ThreadJoin extends Thread{
public ThreadJoin(){
}
@Override
public void run() {
long start = System.currentTimeMillis();
System.out.println("start :"+start+" "+Thread.currentThread().getId());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("end:"+System.currentTimeMillis());
System.out.println("cost:"+(System.currentTimeMillis()-start));
}
public void main(String[] args) {
ThreadJoin mythread = new ThreadJoin();
mythread.start();
try {
mythread.join(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("join:"+System.currentTimeMillis()+" "+Thread.currentThread().getId());
}
}

輸出結(jié)果:
start :1493115426349 9
end:1493115429350
cost:3001
join:1493115429350 1

可見,在 mythread.start();另開了一個子線程后,由于有join方法的插入,接下來的任務(wù)會被暫停掉。

如果沒有join方法的添加,則會直接輸出:
join:1493115534191 1 start :1493115534191 9 end:1493115537192 cost:3001

這個join方法,舉了例子就是,一個女的和男朋友一起約定去看電影,突然男朋友臨時有事,就相當(dāng)于開了一個子線程去忙其他的了,女的則跟他約定,就等你××分鐘,如果在××分鐘內(nèi)趕到,我們則馬上進(jìn)場,如果××分鐘后還沒有趕到,我就自己進(jìn)去了。
我們上面的代碼,由于子線程耗時3s,而接下來的打印動作前面的join設(shè)置的是等待4s,這樣,在第3s后,則馬上開始打印了。如果這時候修改join的方法是2s,則打印結(jié)果是:
start :1493115472005 9 join:1493115474005 1 end:1493115475006 cost:3001

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容