有一个全局变量:num
问题1:
一个线程去写变量num,一个线程去读变量num;那么,是否安全?是否需要加volatile呢?问题2:
多个线程同时读写变量num,但他们的写操作都保证了原子性,是不是只要加一个volatile就可以了呢?问题3:
多个线程同时读写变量num,但写的时候无法保证原子性,比如num++操作这样子,是不是必须使用Synchronized才可以保证同步呢?
那么,加了Synchronized后,是否还需要再加volatile呢?

解决方案 »

  1.   

    Volatile只保证可见性,不保证原子性。把这个加上,写操作再上锁,ok完事儿
      

  2.   

    volatile的功能就一个,就是保证每次读到的数据都是最新的,其他的没有任何保证,记住这句话就行了
      

  3.   


    1需要加。多线程同时读写本身就不是原子性,你如果保证原子性那必然已经加入了同步,所以2,3都是一个问题。加了同步后volatile已经可有可无了。