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