2011-05-03 31 views
0

我在哪裏,的Java多線程:作業調度

  1. J3開始只有唯一的工作J4
  2. 這兩項工作完成後的工作J1 & J2
  3. J5啓動完成後有兩個作業J3 & J5J3 & J5 )需要在兩個不同的線程中執行。
  4. J3 & J5線程需要同時運行

如何可以把它用Java編程?

+0

聞起來像功課 – rfeak 2011-05-03 05:12:36

+0

hahha..yeah排序 – KLCoder 2011-05-03 05:17:57

+0

J3和J5的條件沒有多大意義......線程*的意思是*是非確定性的。恕我直言,最好的「現實世界」解決方案是讓J3和J5都依賴於J1,J2和J4。 – CurtainDog 2011-05-03 06:10:19

回答

3

J1,J2和J4是否也是線程?您可以將它們傳遞給其他工作,並使用Thread.join()等待它們完成。例如,前3個線程:

Thread j1 = new Job1Thread(); 
Thread j2 = new Job2Thread(); 
Thread j3 = new Job3Thread(j1, j2); 
// start them up, etc. 

public class Job3Thread extends Thread { 
    private final Thread j1; 
    private final Thread j2; 

    public Job3Thread(Thread j1, Thread j2) { 
     this.j1 = j1; 
     this.j2 = j2; 
    } 

    public void run() { 
     try { 
      j1.join(); 
      j2.join(); 
      // now start processing 
     } catch (InterruptedException ie) { 
     } 
    } 
} 
+0

ya J1,J2和J4是線程 – KLCoder 2011-05-03 05:10:32

+0

J3和J5線程需要同時運行。這可以如何實現? – KLCoder 2011-05-03 05:23:25

+0

如果這是作業,我會把這部分留給你;)你只需要擴展我爲J4和J5寫的東西。 – WhiteFang34 2011-05-03 05:26:13

0

您始終可以創建一個主線程來檢查以查看各個線程的狀態。一旦看到J1完成,它就會熄滅J3。 J4和J5也可以使用相同的邏輯。

由於這個原因,J3和J5可以並行運行。

狀態可以通過在你的線程中放置一個布爾值來確定,例如「running」。

+0

你。但我希望這兩個作業塊並行執行。主奴當然是一種方法。我承認 – KLCoder 2011-05-03 05:31:58

+0

他們會... – gshauger 2011-05-03 05:33:53

0

你沒有說工作J1和J2必須同時這樣做最簡單的事情是

// thread one 
J1(); 
J2(); 
J5(); 

// thread two 
J3(); 
J4(); 

最簡單的辦法有一個任務,跟着另一個是有方法在同一個線程調用一個在他們之後。 ;)

+0

雅這種方法我也想到..但如果J3-> J1和J2是一個塊和J5-> J4是一個塊,這些塊需要並行完成。你在暗示分歧嗎? – KLCoder 2011-05-03 07:30:55

+0

非常感謝彼得 – KLCoder 2011-05-03 08:47:51