2014-10-31 100 views
1
class Runner extends Thread{ 
    public void run(){ 
     for(int i=0;i<5;i++) 
     { 
      System.out.println("Counting "+i); 
     } 
    } 
} 
public class App { 
    public static void main(String args[]) 
    { 
     Runner runner1=new Runner(); 
     runner1.start(); 
     Runner runner2=new Runner(); 
     runner2.start(); 
    } 
} 

我刚刚通过java中的线程基础知识。预期的输出是:Java线程:运行一个简单的java线程程序输出混淆

Counting 0 
Counting 0 
Counting 1 
Counting 1 
Counting 2 
Counting 2 
Counting 3 
Counting 3 
Counting 4 
Counting 4 

,但我越来越喜欢这个斜面的输出似乎理了这一点:

Counting 0 
Counting 1 
Counting 2 
Counting 3 
Counting 4 
Counting 0 
Counting 1 
Counting 2 
Counting 3 
Counting 4 
+6

您的期望是错的不是输出:) – Shail016 2014-10-31 04:59:48

+1

计数显示顺序将改变请插入在运行这些代码method.IT将工作。因为两个线程同时运行并非一个接一个。 – Visme 2014-10-31 05:02:07

+1

您可能需要计数到100或1000以查看输出交错。第一个线程完成,而你仍然开始从'主)第二个线程('。 – markspace 2014-10-31 05:18:40

回答

2

没有任何一种同步的,不能有任何的期望,执行顺序(和指令的交错)用于多个线程。

在你的榜样,你可以通过把长的停顿(的Thread.sleep)进入循环的每次迭代得到你期望的输出(在技术上还不能保证,但实际而言不可避免的)。

0

请在代码中提供线程睡眠。它将在两个线程之间并发运行。

System.out.println("counting"+i) 
Thread.sleep(500) 

,只要你想