2011-05-03 85 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