首頁 >Java >java教程 >線程--join()方法的介紹

線程--join()方法的介紹

零下一度
零下一度原創
2017-06-29 14:53:071658瀏覽

一、join()方法,官方描述waits for this thread to die 等待目前執行緒死亡;

## 
原始碼:
//無參,預設呼叫join(0)
public final void join() throws InterruptedException {
join(0);
}
 
//傳入兩時間millis 毫秒+nanos奈秒,表示等等millis+nanos,最後還是呼叫了方法3
public final synchronized void join(long millis, int nanos)
throws InterruptedException {
 
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
 
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
 
if (nanos >= 500000 || (nanos != 0 && millis = = 0)) {
millis++;
}
 
join(millis);
}
#//方法3:傳入等時間,單位為毫秒,底層呼叫Object的wait(time)
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;
}
##}
##}
 
二、應用,例如幾個執行緒要依照一定順序執行
 
public class ThreadJoin extends Thread {
 
 
public void run(){
#try {
this.sleep(500);
System.out.println("["+new Date()+"]"+this.getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
 
public static void main(String[] args) throws Exception {
int length = 5;
##Thread[] threads = new Thread[length];
for(int i=0; i
threads[i] = new ThreadJoin();
threads[i].start() ;
threads[i].join();//每個執行緒開啟後都會呼叫join
}
long endTime=System.currentTimeMillis();
}
}
/*
output:
[Sun Jun 11 13:40:42 CST 2017]Thread-0
[Sun Jun 11 13:40:43 CST 2017]Thread-1
[Sun Jun 11 13:40:43 CST 2017]Thread-2
[Sun Jun 11 13:40:44 CST 2017]Thread-3
[Sun Jun 11 13:40:44 CST 2017]Thread-4
 
## 
 
如果把join()註解
結果可能每次都不一樣
[Sun Jun 11 13:51:09 CST 2017]Thread-2
[Sun Jun 11 13:51:09 CST 2017]Thread-4
[Sun Jun 11 13:51:09 CST 2017]Thread-1
[Sun Jun 11 13 :51:09 CST 2017]Thread-3
[Sun Jun 11 13:51:09 CST 2017]Thread-0
#*/
### ## ####做事不能急,給自己一個大方向後總得一步一步來#############

以上是線程--join()方法的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn