Lock的使用

java中明明有synchronized 保留字,但是爲什麼又要誕生出ReentrantLock,ReentrantReadWriteLock類呢?

其實該類出現並不奇怪,因爲java都是面向對象的,鎖當然也是一個對象,憑什麼就不能有一個專門的類呢

ReentrantLock

   該類採用lock()與unlock()來代替獲得鎖與釋放鎖的方法;其經常與Condition配合使用

  在初始化的時候可以傳入一個bool參數來表明這是不是一個公平鎖

      公平鎖:按線程的先後順序獲取鎖,類似於FIFO

     非公平鎖:沒有權重,按CPU的輪詢隨機拿到線程鎖

    private ReentrantLock lock = new ReentrantLock();
    private Condition condition = lock.newCondition();

Condition

一個接口,只能通過lock來獲取,採用await()與signal()來阻塞線程和喚醒線程

一個lock可以獲得多個condition來共多個不同的線程使用

ReentrantReadWriteLock

由於ReentrantLock具有完全排他的效果,同一時間內只能有一個lock()下的代碼在執行,效率低下;

所以ReentrantReadWriteLock讀寫分離鎖,即讀操作不排斥,寫操作互相排斥;“讀寫”操作也是互斥的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章