鎖:synchronized優化(jdk6)

一、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

  • 由於沒有使用 synchronized,因此線程不會陷入阻塞,這是效率提高的因素之一
  • 但若是競爭激烈,能夠想到重試必然頻繁發生,反而效率會受影響

 



 

每一個人都會有一段異常艱難的時光 。 生活的壓力 , 工做的失意 , 學業的壓力。 愛的惶惶不可終日。 挺過來的 ,人生就會豁然開朗。 挺不過來的 ,時間也會教你 ,怎麼與它們握手言和 ,因此沒必要懼怕的。 ——楊絳
相關文章
相關標籤/搜索