2016-04-16 54 views
3

我想要创建两个线程。一个线程将不得不打印奇数,另一个线程将不得不打印1-20个数字之间的偶数。 这是我迄今为止尝试过的代码,但它没有给出预期的输出。在Java中创建两个线程

public class JavaApplication40 extends Thread { 
    @Override 
    public void run(){ 
     while (true){ 
      for (int i=0;i<=20;i++){ 
      if(i%2!=0){ 
       System.out.println("odd " +i); 
      } 
     } 
     } 
    } 

    public static void main(String[] args) { 
     Thread t =new JavaApplication40(); 

     for (int x=0;x<=20;x++){ 
      if(x%2==0){ 
      System.out.println("even " + x); 
      } 
     } 

    } 

} 

此代码仅输出甚至numbers.I想奇数too.Someone请告诉我,我怎么能修改上面的代码,以获得预期的输出。

+1

您没有启动线程。在执行者提交是很好的。 –

+0

我应该在这段代码之后调用start方法吗?线程t =新的JavaApplication40();我应该在哪里包含启动方法? – Char

+0

只是之后是好的,但不保证它立即开始 –

回答

3

启动它,你创建你需要调用start()它来启动它Thread之后。请致电

t.start(); 

此外,您应该扩展Thread。相反,你应该实现Runnable并用Thread包装它。你也不需要检查一个值是否奇数,或者即使你确定这个值总是奇数或偶数。

public class JavaApplication40 { 
    public static void main(String[] args) { 
     Thread t = new Thread(new Runnable() { 
      public void run() { 
       // starting at 1 and counting by 2 is always odd 
       for (int i = 1; i < 10000; i += 2) 
        System.out.println("odd " + i); 
      } 
     }); 
     t.start(); 

     // starting at 0 and counting by 2 is always even 
     for (int x = 0; x < 10000; x+=2) 
      System.out.println("even " + x);  
    } 
} 

注意:使用线程的全部要点是要有独立的执行和线程需要时间来开始。这意味着你可以把所有的偶数和全部奇数结合在一起。即它比线程启动更快地打印它们。

您可能需要打印更多的数字才能同时打印它们。例如10_000而不是20.

+0

谢谢你的解释 – Char

+0

你已经在创建后调用start方法线程正确? – Char

+0

@Char就是这么做的,注意它需要一段时间才能开始,所以你可以在第一个“odd”消息之前看到许多“偶数”消息。 –

1

你创建了你的线程,但从未开始它。

Thread t =new JavaApplication40(); 

创建它,启动时,它会调用run()

t.start()

1
ExecutorService es=Executors.newFixedThreadPool(2); 
es.submit(t); 
for .... 

es.shutdown(); // .shutdownNow() for infinite looped threads