[問題] 想請問關於JOIN的寫法

看板java作者 (懷念美國貓王)時間10年前 (2014/11/10 14:00), 10年前編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
現在一個流程是這樣 Thread A 執行完成之後,分成兩條Thread,同時執行 B跟 C 然後C這條線執行完後,會再執行D 等到B這條線跟 C&D這條線兩條都跑完後,才開始執行E 如果像是我以下這種寫法,算是 B跟 CD跑完之後,才開始跑E嗎 那一開始起頭的 A 我要怎麼寫呢 public void execute(TaskExecutionContext executor) throws RuntimeException { System.out.println("Thread E "); Thread threadB = new Thread(new Runnable() { public void run() { try { System.out.println("Thread B 開始.."); for(int i = 0; i < 5; i++) { Thread.sleep(1000); System.out.println("Thread B 執行.."); } System.out.println("Thread B 即將結束.."); } catch(InterruptedException e) { e.printStackTrace(); } } }); Thread threadC = new Thread(new Runnable() { public void run() { try { System.out.println("Thread C 開始.."); for(int i = 0; i < 5; i++) { Thread.sleep(1000); System.out.println("Thread C 執行.."); } System.out.println("Thread C 即將結束.."); System.out.println("Thread D 開始.."); for(int i = 0; i < 5; i++) { Thread.sleep(1000); System.out.println("Thread D 執行.."); } System.out.println("Thread D 即將結束.."); } catch(InterruptedException e) { e.printStackTrace(); } } }); threadB.start(); threadC.start(); try { // Thread B 加入 Thread A threadB.join(); threadC.join(); } catch(InterruptedException e) { e.printStackTrace(); } System.out.println("Thread E 執行"); for (int i = 1; i <= 30; i++) { System.out.println("Task 1 says: " + i + executor); executor.setStatusMessage("第一個任務執行到第 " + i + " 個"); executor.setCompleteness(i / 30D); try { Thread.sleep(1000); } catch (InterruptedException e) { ; } executor.pauseIfRequested(); if (executor.isStopped()) { break; } } } 格式可能有點跑掉,這是 讓E等待 B跟CD的寫法 怎麼寫成從A開始呢 因為 E 就是主程序了說.. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.81.121.136 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1415599219.A.31C.html ※ 編輯: PTTCATKING (111.81.121.136), 11/10/2014 14:11:25 ※ 編輯: PTTCATKING (111.81.121.136), 11/10/2014 14:12:07 ※ 編輯: PTTCATKING (111.81.121.136), 11/10/2014 14:32:28

11/10 15:27, , 1F
concurrent不用嗎~不要再用thread了拉
11/10 15:27, 1F

11/10 20:50, , 2F
如果真的要abcde的話,就用兩個countdown latch。cd共用
11/10 20:50, 2F

11/10 20:50, , 3F
一個,bde共用一個。
11/10 20:50, 3F

11/11 15:26, , 4F
感謝樓上兩位,研究樓上們的推薦,很順利的完成了
11/11 15:26, 4F

11/11 15:27, , 5F
感謝高手的意見提供
11/11 15:27, 5F
文章代碼(AID): #1KO5HpCS (java)
文章代碼(AID): #1KO5HpCS (java)