1.volatile和CAS底层都使用lock前缀实现,有什么共通和区别的地方?
volatile通过lock保证了对应变量的读操作和写操作的可见性,读操作保证每次从内存加载最新的值,写操作保证变量直接写回内存。CAS通过lock保证的了整个比较和替换过程的原子性,compare和swap是两个操作,通过lock保证这两个操作的原子性和可见性,即每次都使用内存的最新值与期望值进行比较,替换后的新值直接写回内存,并且保证这两个组合操作的原子性。
2.CAS操作本身具有volatile语义,为什么AtomicInteger的自增操作需要同时使用CAS以及volatile关键词声明变量?
1.CAS操作能保证每次从内存读取最新值与期望值比较,但每次进行CAS操作前我们仍然需要从内存读取最新的值作为期望值进行比较。
2.多线程下需要通过volatile获取最新的值。
网友评论