一、CAS原理併發
(1)CASide
二、CAS和volatile實現無鎖併發性能
public class Test { public static void main(String[] args) throws InterruptedException { AtomicInteger atomicInteger = new AtomicInteger(); Runnable mr = () -> { for (int i = 0; i < 1000; i++) { atomicInteger.incrementAndGet(); } }; ArrayList<Thread> ts = new ArrayList<>(); for (int i = 0; i < 5; i++) { Thread t = new Thread(mr); t.start(); ts.add(t); } for (Thread t : ts) { t.join(); } System.out.println("number = " + atomicInteger.get()); } }
AtomicInteger的源碼中包括Unsafe類,Unsafe類提供了原子操做atom
三、Unsafe類線程
Unsafe類使Java擁有了像C語言的指針同樣操做內存空間的能力,同時也帶來了指針的問題。過分的使用Unsafe類會使得出錯的概率變大,所以Java官方並不建議使用的,官方文檔也幾乎沒有。Unsafe對象不能直接調用,只能經過反射得到。指針
CAS的這種機制咱們稱之爲樂觀鎖,綜合性能較好對象
CAS獲取共享變量時,爲了保證該變量的可見性,須要使用volatile修飾。結合CAS和volatile能夠實現無鎖併發,適用於競爭不激烈、多核 CPU 的場景下。blog