class TestThread implements Runnable 

int tickes=100; 
public void run() 

while(true){ 
if(tickes>0) 
System.out.println(Thread.currentThread().getName()+"is salling tickets"+" "+tickes--);} } 

class TestTicket 

public static void main(String args[]) 

TestThread t=new TestThread(); 
new Thread(t).start(); 
new Thread(t).start(); 
new Thread(t).start(); 
new Thread(t).start(); 


为什么我在命令行里用javac编译和java运行的结果和在MyEclipse中运行的结果不一样啊(在命令行用java运行结果tickets不是递减的,基本上没有什么规律,而在MyEclipse中运行时却是递减的,从100减到1)我是菜鸟 谁能帮我解决一下 谢谢了

解决方案 »

  1.   

    这个问题我在做车票例子的时候也发现过,因为MyEclipse执行线程时是同步的。
    和你在TestThread 上加上synchronized关键字是一样的
    class TestThread implements Runnable 

    int tickes=100; 
    public synchronized void run() 

    while(true){ 
    if(tickes>0) 
    System.out.println(Thread.currentThread().getName()+"is salling tickets"+" "+tickes--);} } 

    //加上这个在CMD里和MyEclipse里的运行结果就一样了
      

  2.   

    我还想问一下 线程的运行是否和CPU的性能有关系啊 比如说分给每个线程的CPU时间片的不同 导致多线程的运行结果不同
      

  3.   

    对的,因为最终结果是CPU算出来的,所以不同的CPU计算结果不一样是正常现象,AMD和Intel的CUP算出来的结果差异就更大了,忘了在哪看过说这2个CPU的计算方式是不一样的。我在自己机器上算的也是从100到1,顺序排列的,就是4个窗口号比较乱。