jdk7對此一句話:Waits for this thread to die(等待這個線程死亡)其它的線程的狀況如何就不太清楚了。 多線程
仍是本身動手筆劃兩下:用三個線程來測試t1,t2,main 測試
1、Thread t1 = new Thread(){
public void run(){
int i = 0;
while(i++ < 10){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("t1:" + i);
}
}
};
Thread t2 = new Thread(){
public void run(){
int i = 0;
while(i++ < 100){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("t2:" + i);
}
}
};
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t2.start();
for(int i = 0;i < 1000; i++){
System.out.println("main:" + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} this
這個程序結果是 t1先執行完(t1 is died),而後t2 和 main交叉輸出結果。 線程
2、將t1.join()放到t2.start()後面 it
t1.start();
t2.start(); io
try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} thread
(其它的同上) jdk
先是t1和t2交叉執行,t1執行完後(t1 is died),剩下的t2還沒執行的部分和main交叉執行。 程序
3、 將t1.join()放到最後面,則三個線程跟普通多線程沒什麼區別,誰先執行完誰先死。。。 方法
總之,根據我運行出的結果看join()是阻塞在它後面的線程 ,只要在這個以前的則不受影響,包括主線程。
因此第一句話完整的說法是:等待調用這個方法(join()方法)的線程死亡後,此方法後面的線程才能執行,前面的線程不受影響。
(若有不對或不實的地方,請多多批評和指正)