日期:2014-05-20  浏览次数:20702 次

关于线程问题,请帮我看看呀。谢谢各位。
程序代码如下:
public   class   ARunnable   implements   Runnable   {
        int   a;
public   void   run()   {
              for(a=0;a <10;a++){
              try   {
Thread.sleep(100);
}   catch   (InterruptedException   e)   {
}
              System.out
.println(Thread.currentThread().getName()   +   "   a= "   +   a);  
              }
}

public   static   void   main(String[]   args)   {
ARunnable   run=new   ARunnable();
                Thread   thread1=new   Thread(run);
                Thread   thread2=new   Thread(run);
                thread1.start();
                thread2.start();
}
}

运行的结果为:
Thread-0   a=0
Thread-1   a=1
Thread-1   a=2
Thread-0   a=3
Thread-1   a=4
Thread-0   a=4
Thread-0   a=6
Thread-1   a=7
Thread-1   a=8
Thread-0   a=9
Thread-1   a=10

程序员结果怎么多了一行Thread-1   a=10呀,因为两个线程同时操作一个对象
但我在线程控制了循环为10次,但结果却多出一行呀。何解呀。




------解决方案--------------------
Thread-0在执行i++的时候,i = 10,此时还没执行 i < 10的判断,此时
Thread-1执行print语句,此时i = 10,然后执行i++,再进行i <10的判断,结束循环

结果就成了那个样子了。
------解决方案--------------------
所以要对a变量的修改和读取进行synchronized
------解决方案--------------------
同步