没有synchronized时,run中运行的代码,有可能在其中一个线程没有执行完时,另外一个线程进入,从而改变了x或y的值。

解决方案 »

  1.   

    打印的同一行会有不同的情况。
    当上一个线程执行到x++时,此时转入另一个线程,这时执行y++,
    然后打印x= a, y=a + 1;
    所以会有不同的情况。
    因为
    7. (new Thread(that)).start(); 
    8. (new Thread(that)).start(); 
    这会执行同一个内存中的数据,且不会重复更改同一个数据。
    这也是Runnable接口的好处,可以在不同的地方去共同操作同一个对象,如一个售票系统,票是唯一的,用Runnable接口,在不同的地方都用new Thread(所有票对象),这样就能保证不会把同一张票卖出多次。
      

  2.   

    用了synchronized之后 就相当于输出一个x的同时 也输出y 两者同步没有synchronized时 cpu分配会给x,y线程的时间可能不一样 所以就出现了x y不相等的结果啊