首頁 >Java >java教程 >分析ReentrantLock的重入特性的Java測試範例

分析ReentrantLock的重入特性的Java測試範例

WBOY
WBOY轉載
2023-05-09 18:07:08821瀏覽

1、概念

可重入的讀寫鎖定,讀寫鎖定內部維護了一個ReadLock和一個WriteLock,底層還是AQS ,但是AQS只有一個state狀態量,如何同時控制讀和寫呢,這裡使用了state(int)的高16位表示讀取狀態,低16為表示寫,高16位的值代表獲取讀鎖的線程數,低16位代表寫鎖的可重入數。

2、原理

利用CAS AQS佇列來實作。它支援公平鎖和非公平鎖,兩者的實作類似

3、實例

public class ReentrantDemo implements Runnable {
    Lock lock = new ReentrantLock();
    @Override
    public void run() {
        set();
    }
    public void set() {
        try {
            lock.lock();
            System.out.println("set 方法");
            get();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();// 必须在finally中释放
        }
    }
 
    public void get() {
 
        try {
            lock.lock();
            System.out.println("get 方法");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
    public static void main(String[] args) {
        ReentrantDemo reentrantDemo = new ReentrantDemo();
        new Thread(reentrantDemo).start();
    }
}

以上是分析ReentrantLock的重入特性的Java測試範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除