为啥AtomicInteger底层用的volatile,但是可以进行++的操作呢?
众所周知,用volatile时,对volatile的操作最好不要涉及到volatile自身。
但AtomicInteger它有一个方法incrementAndGet,它却可以对自己进行++。
可以看到,它调用了unsafe的getAndAddInt,这个相当于乐观锁,比较内存中的内容是否一样,如果一样就改掉,这是一个原子操作——比较+修改。
所以它就是安全的。
为啥AtomicInteger底层用的volatile,但是可以进行++的操作呢?
众所周知,用volatile时,对volatile的操作最好不要涉及到volatile自身。
但AtomicInteger它有一个方法incrementAndGet,它却可以对自己进行++。
可以看到,它调用了unsafe的getAndAddInt,这个相当于乐观锁,比较内存中的内容是否一样,如果一样就改掉,这是一个原子操作——比较+修改。
所以它就是安全的。