最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的ReentrantReadWriteLock使用詳解

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

ReentrantReadWriteLock

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

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

b.當(dāng)沒(méi)有線程獲取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í)例測(cè)試的是上邊的規(guī)則c——當(dāng)有Read鎖存在時(shí),獲取不到Write鎖。

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

這是其他線程嘗試去獲取寫鎖,發(fā)現(xiàn)5秒之后其他線程再開始寫入然后在控制臺(tái)打印出結(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秒過(guò)去了");
        }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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將內(nèi)容寫到txt文檔里面并讀取及刪除的方法

    將內(nèi)容寫到txt文檔里面并讀取及刪除的方法

    本文有個(gè)不錯(cuò)的示例,主要講解如何將內(nèi)容寫到txt文檔里面、讀取文件里面的內(nèi)容以及清除txt文件里面的內(nèi)容
    2014-01-01
  • java刪除指定目錄下指定格式文件的方法

    java刪除指定目錄下指定格式文件的方法

    這篇文章主要為大家詳細(xì)介紹了java刪除指定目錄下指定格式文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java連接MySQL數(shù)據(jù)庫(kù)命令行程序過(guò)程

    Java連接MySQL數(shù)據(jù)庫(kù)命令行程序過(guò)程

    SQL編程包括兩種形式,一種是過(guò)程化編程,主要通過(guò)數(shù)據(jù)庫(kù)交互式工具,通過(guò)存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù)等形式的編程;另一種是嵌入式SQL編程,將SQL語(yǔ)句嵌入到高級(jí)開發(fā)語(yǔ)言,完成數(shù)據(jù)的各種操作
    2021-10-10
  • SpringBoot feign動(dòng)態(tài)設(shè)置數(shù)據(jù)源(https請(qǐng)求)

    SpringBoot feign動(dòng)態(tài)設(shè)置數(shù)據(jù)源(https請(qǐng)求)

    這篇文章主要介紹了SpringBoot如何在運(yùn)行時(shí)feign動(dòng)態(tài)添加數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 使用@ApiModel遇到的問(wèn)題及解決

    使用@ApiModel遇到的問(wèn)題及解決

    這篇文章主要介紹了使用@ApiModel遇到的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java線程同步機(jī)制_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java線程同步機(jī)制_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    在之前,已經(jīng)學(xué)習(xí)到了線程的創(chuàng)建和狀態(tài)控制,但是每個(gè)線程之間幾乎都沒(méi)有什么太大的聯(lián)系??墒怯械臅r(shí)候,可能存在多個(gè)線程多同一個(gè)數(shù)據(jù)進(jìn)行操作,這樣,可能就會(huì)引用各種奇怪的問(wèn)題。現(xiàn)在就來(lái)學(xué)習(xí)多線程對(duì)數(shù)據(jù)訪問(wèn)的控制吧
    2017-05-05
  • springboot自動(dòng)裝配的源碼與流程圖

    springboot自動(dòng)裝配的源碼與流程圖

    在日常的開發(fā)過(guò)程中Spring Boot自動(dòng)裝配的特性給我們開發(fā)減少了很多重復(fù)性的工作,這篇文章主要給大家介紹了關(guān)于springboot自動(dòng)裝配的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java實(shí)現(xiàn)郵件發(fā)送功能

    Java實(shí)現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Spring Boot集成LangChain來(lái)實(shí)現(xiàn)Rag應(yīng)用的問(wèn)題小結(jié)

    Spring Boot集成LangChain來(lái)實(shí)現(xiàn)Rag應(yīng)用的問(wèn)題小結(jié)

    檢索增強(qiáng)生成(RAG)是一種優(yōu)化大型語(yǔ)言模型(LLM)輸出的技術(shù),通過(guò)引用權(quán)威知識(shí)庫(kù)以增強(qiáng)模型的準(zhǔn)確性和相關(guān)性,RAG允許LLM在不重新訓(xùn)練的情況下訪問(wèn)特定領(lǐng)域的知識(shí),提高了其在各種應(yīng)用中的實(shí)用性和信任度,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 徹底理解Spring注解@Autowired實(shí)現(xiàn)原理

    徹底理解Spring注解@Autowired實(shí)現(xiàn)原理

    這篇文章主要為大家詳細(xì)的介紹了Spring注解@Autowired實(shí)現(xiàn)的原理,縝密的邏輯分析,實(shí)踐應(yīng)用示例操作說(shuō)明,讓大家徹底的理解Spring注解@Autowired背后實(shí)現(xiàn)原理
    2022-03-03

最新評(píng)論

同仁县| 广东省| 金溪县| 濮阳县| 遵义县| 镇远县| 晋宁县| 察雅县| 多伦县| 兴宁市| 隆回县| 平原县| 武陟县| 安泽县| 岑溪市| 广东省| 象山县| 天台县| 敖汉旗| 旬阳县| 炉霍县| 靖安县| 曲阳县| 綦江县| 北宁市| 和静县| 连江县| 本溪| 济宁市| 阳谷县| 特克斯县| 广汉市| 通榆县| 浦县| 哈巴河县| 舟山市| 布拖县| 延庆县| 资源县| 乌什县| 临江市|