欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的ReentrantReadWriteLock使用詳解

 更新時(shí)間:2023年11月01日 10:56:24   作者:興趣使然的程序猿  
這篇文章主要介紹了Java中的ReentrantReadWriteLock使用詳解,ReentrantReadWriteLock是Java中的一個(gè)鎖實(shí)現(xiàn),它提供了讀寫分離的功能,這種讀寫分離的機(jī)制可以提高并發(fā)性能,特別適用于讀多寫少的場景,需要的朋友可以參考下

ReentrantReadWriteLock

ReadWriteLock即讀寫鎖,ReadWriteLock的規(guī)則如下。

a.當(dāng)有線程獲取了Write鎖時(shí),其他線程不能獲取到任何鎖(寫鎖和讀鎖都不能。

b.當(dāng)沒有線程獲取Wrete鎖時(shí),所有線程都可以獲取Read鎖。

c.當(dāng)有Read鎖存在時(shí),獲取不到Write鎖。

1 ReentrantReadWriteLock實(shí)現(xiàn)類繼承關(guān)系

ReentrantReadWriteLock實(shí)現(xiàn)類繼承關(guān)系

可見該類實(shí)現(xiàn)了ReadWriteLock接口。

2 ReentrantReadWriteLock使用

創(chuàng)建一個(gè)讀寫鎖。

static ReadWriteLock lock = new ReentrantReadWriteLock();

獲取寫鎖。

lock.writeLock().lock();

釋放寫鎖。

lock.writeLock().unlock();

獲取讀鎖。

lock.readLock().lock();

釋放讀鎖。

lock.readLock().unlock();

3 ReentrantReadWriteLock使用實(shí)例

該實(shí)例測試的是上邊的規(guī)則c——當(dāng)有Read鎖存在時(shí),獲取不到Write鎖。

讓一個(gè)線程先獲取到讀鎖并持有5秒鐘。

這是其他線程嘗試去獲取寫鎖,發(fā)現(xiàn)5秒之后其他線程再開始寫入然后在控制臺打印出結(jié)果。

class ReadWriteLockDemo{
    static ReadWriteLock lock = new ReentrantReadWriteLock();
    static String text = "hello";
    public static void modify(){
        lock.writeLock().lock();
        try {
            System.err.println(Thread.currentThread().getName()+"開始修改");
            text += " "+Thread.currentThread().getName();
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            lock.writeLock().unlock();
        }
    }
    public static void readWithReadLock(){
        lock.readLock().lock();
        try {
            System.err.println(text);
            Thread.sleep(5000);
            System.err.println("5秒過去了");
        }catch (Exception e){
        }finally {
            lock.readLock().unlock();
        }
    }
    public static void main(String[] args) throws InterruptedException {
        new Thread(()->{
            readWithReadLock();
        }).start();
        Thread.sleep(1000);
        for (int i=0;i<10;i++) {
            new Thread(() -> {
                modify();
            }).start();
        }
    }
}

讀寫鎖執(zhí)行結(jié)果

使用讀寫鎖時(shí)需要需要明確上述三條規(guī)則。

并且可知,當(dāng)讀很多時(shí),很難寫入,所以讀寫鎖不適用于讀和寫都很多的情況。

到此這篇關(guān)于Java中的ReentrantReadWriteLock使用詳解的文章就介紹到這了,更多相關(guān)ReentrantReadWriteLock使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IntelliJ IDEA中查看當(dāng)前類的所有繼承關(guān)系圖

    IntelliJ IDEA中查看當(dāng)前類的所有繼承關(guān)系圖

    今天小編就為大家分享一篇關(guān)于IntelliJ IDEA中查看當(dāng)前類的所有繼承關(guān)系圖,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • SpringBoot攔截器以及源碼詳析

    SpringBoot攔截器以及源碼詳析

    攔截器在我們平時(shí)的項(xiàng)目中用處有很多,如:日志記錄(我們后續(xù)章節(jié)會講到)、用戶登錄狀態(tài)攔截、安全攔截等等,所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot攔截器以及源碼的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Java數(shù)組優(yōu)點(diǎn)和缺點(diǎn)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java數(shù)組優(yōu)點(diǎn)和缺點(diǎn)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    本文給大家簡單介紹下java數(shù)組的優(yōu)點(diǎn)和缺點(diǎn)知識,需要的的朋友參考下吧
    2017-04-04
  • 如何獲取?Spring?heapdump中的明文密碼

    如何獲取?Spring?heapdump中的明文密碼

    Actuator是Spring?Boot提供的應(yīng)用系統(tǒng)監(jiān)控的開源框架,在攻防場景里經(jīng)常會遇到Actuator配置不當(dāng)?shù)那闆r,攻擊者可以直接下載heapdump堆轉(zhuǎn)儲文件,本文介紹如何獲取?Spring?heapdump中的密碼明文,需要的朋友可以參考下
    2022-07-07
  • Redis如何實(shí)現(xiàn)分布式鎖詳解

    Redis如何實(shí)現(xiàn)分布式鎖詳解

    分布式鎖一般有三種實(shí)現(xiàn)方式:1. 數(shù)據(jù)庫樂觀鎖;2. 基于Redis的分布式鎖;3. 基于ZooKeeper的分布式鎖.本篇文章將介紹第二種方式,基于Redis實(shí)現(xiàn)分布式鎖,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • java實(shí)現(xiàn)簡易超市管理系統(tǒng) 附源碼下載

    java實(shí)現(xiàn)簡易超市管理系統(tǒng) 附源碼下載

    這篇文章主要介紹了java實(shí)現(xiàn)簡易超市管理系統(tǒng)(含源碼),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 自定義log4j.properties的加載位置方式

    自定義log4j.properties的加載位置方式

    這篇文章主要介紹了自定義log4j.properties的加載位置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springcloud-feign調(diào)用報(bào)錯(cuò)問題

    springcloud-feign調(diào)用報(bào)錯(cuò)問題

    這篇文章主要介紹了springcloud-feign調(diào)用報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java實(shí)現(xiàn)識別二維碼圖片功能

    java實(shí)現(xiàn)識別二維碼圖片功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)識別二維碼圖片功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Mac M1 Java 開發(fā)環(huán)境配置詳解

    Mac M1 Java 開發(fā)環(huán)境配置詳解

    這篇文章主要介紹了Mac M1 Java 開發(fā)環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論