解决方案 »

  1.   

    volatile 保证的是某个被修饰变量的一致性,而同步性是需要sync或者锁来保证的,你输出值中先输出了2然后再输出1,是因为一个线程在完成0-->1和执行输出=====1的过程中间,另一个线程完成了1-->2后输出=====2,形成了你说的输出结果,是线程语句执行顺序的问题。
      

  2.   


    去看《java并发编程实践》吧
      

  3.   

    对,我想表达的就是在另一个线程完成1——>2的输出后,a的值应该是2了,在另一个线程打印“=====”+a的时候,这里为什么没有去获取a的最新值。volatile保持一致性的原理不是不复制副本,每次都获取内存中a的真实值么。如果这里保持一致性就应该打印“=======2”了,而不是打印“========1”了
      

  4.   

    还是说volatile在查询的时候并不会保证数值的一致性,只有在更改的时候才去检查数据是否一致??
      

  5.   

    volatile在只有一个写入者和多个读取者时可以不用同步.如果有多个写入者线程你肯定要同步才能得到正确结果.