帥哞哞
2006-07-31 18:09:35 UTC
關於以下程式:
public class JoinTest{
class th1 extends Thread{
public void run(){
for(int i=1;i<=200;i++) System.out.println(" "+i);
}
}
class th2 extends Thread{
public void run(){
for(int i=201;i<=400;i++) System.out.println(i);
}
}
public static void main(String[] args) {
JoinTest jt = new JoinTest();
Thread t1 = jt.new th1();
Thread t2 = jt.new th2();
try{
t1.start();
t2.start();
t1.join(); //等t1執行完再執行t2
//t2.join();
}catch(InterruptedException e){}
}
}
這一個JoinTest類別會產生兩個執行序t1(列印1到200),t2(列印201到400),
我的預期結果是會從1列印到400,
因為我加了t1.join()一列,表示我希望在t1結束再執行t2,
這是我對join()方法的認知,
但程式結果產生不規則交互執行,請問是為啥呢?
--
[1;36m┌─────[33m◆[37mKKCITY[33m◆[36m─────┐[m[1;32m▇[33m─┐[;1;36mKKADSL[33m→[37m六星級優質連線服務[m
[1;36m│[31m bbs.kkcity.com.tw [36m│[32m┴ [33m└─[;1;34m▇[37m 馬上申請帶你上網環遊全世界![m
[1;36m└──[34m《[0;37mFrom:140.131.95.183 [1;34m》[36m──┘[31m KK[33mADSL[34m ┴ [37;42m http://adsl.kkcity.com.tw [m
--
public class JoinTest{
class th1 extends Thread{
public void run(){
for(int i=1;i<=200;i++) System.out.println(" "+i);
}
}
class th2 extends Thread{
public void run(){
for(int i=201;i<=400;i++) System.out.println(i);
}
}
public static void main(String[] args) {
JoinTest jt = new JoinTest();
Thread t1 = jt.new th1();
Thread t2 = jt.new th2();
try{
t1.start();
t2.start();
t1.join(); //等t1執行完再執行t2
//t2.join();
}catch(InterruptedException e){}
}
}
這一個JoinTest類別會產生兩個執行序t1(列印1到200),t2(列印201到400),
我的預期結果是會從1列印到400,
因為我加了t1.join()一列,表示我希望在t1結束再執行t2,
這是我對join()方法的認知,
但程式結果產生不規則交互執行,請問是為啥呢?
--
[1;36m┌─────[33m◆[37mKKCITY[33m◆[36m─────┐[m[1;32m▇[33m─┐[;1;36mKKADSL[33m→[37m六星級優質連線服務[m
[1;36m│[31m bbs.kkcity.com.tw [36m│[32m┴ [33m└─[;1;34m▇[37m 馬上申請帶你上網環遊全世界![m
[1;36m└──[34m《[0;37mFrom:140.131.95.183 [1;34m》[36m──┘[31m KK[33mADSL[34m ┴ [37;42m http://adsl.kkcity.com.tw [m
--