因为 V 是一个类变量 。下面的程序 调用 时总是加晚在减。还用 synchronized 使其同步。所以guaranteed always to be 0 or 1。

解决方案 »

  1.   

    a() 和 b() 都是synchronized,即同步,所以调用 a() 和 b() 对于i,j,k中的v的值作先加后减,所以is guaranteed always to be 0 or 1.
      

  2.   

    那假如我创建一个Q7ed5的实例,然后开一个线程同时对该实例进行操作,一个线程执行a(), 另外一个线程执行b(),那理论上i.v不是有可能是2吗?(因为不清楚,所以献丑之处还请各位不要见笑,;))
      

  3.   

    进入a 或b之前必须先取得class Q7ed5 对象的机锁,然后占有之,所以a 与 b总是串行执行的