Discussion:
join的問題
(时间太久无法回复)
帥哞哞
2006-07-31 18:09:35 UTC
Permalink
關於以下程式:

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()方法的認知,
但程式結果產生不規則交互執行,請問是為啥呢?
--
┌─────◆KKCITY◆─────┐▇─┐KKADSL→六星級優質連線服務
│ bbs.kkcity.com.tw │┴ └─▇ 馬上申請帶你上網環遊全世界!
└──《From:140.131.95.183 》──┘ KKADSL ┴  http://adsl.kkcity.com.tw 
--
喔帥
2006-07-31 17:26:00 UTC
Permalink
※ 引述《***@kkcity.com.tw (帥哞哞)》之銘言:
: 關於以下程式:
: 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
我的想法是這樣 因為你現在這一段程式碼是放在main裡頭
執行上面t1.join()的應該就是main thread
所以呢 join到t1之後的應該是main thread而不是t2

我不確定我的想法是不是正確 還請其他高手指教

: //t2.join();
: }catch(InterruptedException e){}
: }
: }
: 這一個JoinTest類別會產生兩個執行序t1(列印1到200),t2(列印201到400),
: 我的預期結果是會從1列印到400,
: 因為我加了t1.join()一列,表示我希望在t1結束再執行t2,
: 這是我對join()方法的認知,
: 但程式結果產生不規則交互執行,請問是為啥呢?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.64.83.43
EatCat
2006-07-31 23:39:50 UTC
Permalink
: 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();

t1.start();
t1.join(); //t1先join(), t2再start()就沒問題了
t2.start();


: }catch(InterruptedException e){}
: }
: }

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.218.221

Loading...