解决方案 »

  1.   


    public static AtomicInteger index = new AtomicInteger(0);public static void incrementI() {
    for (int i = 0; i < 1000; i++) {
    index.incrementAndGet();
    }
    }
      

  2.   

    incrementAndGet
    自己本身就已经累加1了,不用其他的变量作为中介
      

  3.   

    Sync.i = new AtomicInteger(Sync.i.incrementAndGet());为啥要重新new一个,直接inc不就可以了?
      

  4.   

    多谢提醒,貌似是这个问题,这段代码并不是原子操作,其中包括一个原子的increment,还包括一个不能保证原子的赋值操作,这样说对么?Sync.i = new AtomicInteger(Sync.i.incrementAndGet());
      

  5.   

    改成Sync.i = new AtomicInteger(Sync.i.incrementAndGet());就正常了,谢谢指导!
      

  6.   


    Sync.i的取值和设值 并不是原子的。
      

  7.   

    恩,是的。Sync.i的取值和设值 并不是原子的。