Re: [問題] thread的start
※ 引述《adrianshum (Alien)》之銘言:
: ※ 引述《H45 (!H45)》之銘言:
: : 再做一個鳴槍,讓 a 和 b 去聽這個槍聲
: : 聽到之後再開跑。
: [43]
: : ======================================================
: : 實際測試顯示,B 總是比 A 先跑完
: : 以下是本程式的輸出
: : B: Job Finished.
: : A: Job Finished.
: : 不要問我為什麼會這樣 =.=
: 不用搞那麼多.
: JDK5 的 concurrent package 裡有 Barrier 可用
: java.util.concurrent.CyclicBarrier
: alien
感謝前輩指點 m(_ _)m
以下是修改後的程式碼:
public static void main(String[] args) throws Exception {
// 仍然是兩個選手,所以給柵欄 2 個洞
final CyclicBarrier barrier = new CyclicBarrier(2);
// 一樣是同樣的賽程,跑步者 (runner)
Runnable runner = new Runnable() {
public void run() {
try {
// 到柵欄等待所有選手就緒
barrier.await();
// 開跑!跑 1000 毫秒!
Thread.sleep(1000);
// 跑完之後和大家說你辦到了!
System.out.println(Thread.currentThread().getName() + ": Job Finished.");
} catch (Exception e) {
e.printStackTrace();
}
}
};
// a, b 兩個選手,名叫 "A", "B", respectively.
Thread a = new Thread(runner, "A");
Thread b = new Thread(runner, "B");
// 叫 a, b 選手開始動!
a.start();
b.start();
// 等 a, b 掛掉....
a.join();
b.join();
}
執行結果有時 A 較快,有時 B 較快
可能一:
A: Job Finished.
B: Job Finished.
可能二:
B: Job Finished.
A: Job Finished.
但是「可能一」的出現率似乎較高的樣子,以我的電腦測試結果而言。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.13
推
06/16 21:32, , 1F
06/16 21:32, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):