public void setXY(int i)没有同步,所以就当多个线程同时访问的时候就有可能出现X和Y的值不一致的情况……比如第一个线程把X设为1后进入休眠,然后第二个线程把X和Y都设为2,然后第一个线程退出休眠,把Y设为1……明白了吗?

解决方案 »

  1.   

    应该是多线程同时调用setXY()时会有可能出现x!=y的情况,我考试时也碰到了这个题目,一模一样的,原因就是ender说的了,反正我做对了,因为我的thread部分是满分(我有6个满分,哈!)
      

  2.   

    用多线程调用check()方法。
    在多线程程序中如果多个线程共享相同的对象,且每一个线程都调用了能改变它状态的方法,按照对象被访问次序的不同,会产生不同的不可靠对象,即不确定性。本题的check()方法没有使用同步化机制(synchronized),当一个线程在执行check()方法的某步时就有可能被中断使得 x 、 y的值不确定。
      

  3.   

    这道题的提问部分是否应为:
    在调用了setXY(i)后,什么情况下调用check()会返回true?
    否则我对以上各位的解释非常非常的不懂
    如果没有“在调用了setXY(i)后”这个条件,还请各位在详细解释解释
      

  4.   

    to kare
    你理解的没错。to all
    经过大家的解释,我明白多了