Re: [問題] thread的start

看板java作者 (!H45)時間17年前 (2008/06/16 11:06), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《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
不是本來就不能預期哪一個 thread 先跑完嗎????
06/16 21:32, 1F
文章代碼(AID): #18LTYkQB (java)
文章代碼(AID): #18LTYkQB (java)