<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    java reentrantlock

    文檔

    java reentrantlock

    java reentrantlock是一個可重入且獨占式的鎖,它具有與使用synchronized監視器鎖相同的基本行為和語義,增加了輪詢、超時、中斷等高級功能,是一種遞歸無阻塞的同步機制,該鎖還支持獲取鎖時的公平和非公平選擇。
    推薦度:
    導讀java reentrantlock是一個可重入且獨占式的鎖,它具有與使用synchronized監視器鎖相同的基本行為和語義,增加了輪詢、超時、中斷等高級功能,是一種遞歸無阻塞的同步機制,該鎖還支持獲取鎖時的公平和非公平選擇。

    java reentrantlock是什么?一起來看下吧:

    是一個可重入且獨占式的鎖,它具有與使用synchronized監視器鎖相同的基本行為和語義,但與synchronized關鍵字相比,它更靈活、更強大,增加了輪詢、超時、中斷等高級功能。ReentrantLock,顧名思義,它是支持可重入鎖的鎖,是一種遞歸無阻塞的同步機制。除此之外,該鎖還支持獲取鎖時的公平和非公平選擇。

    ReentrantLock的內部類Sync繼承了AQS,分為公平鎖FairSync和非公平鎖NonfairSync。如果在絕對時間上,先對鎖進行獲取的請求你一定先被滿足,那么這個鎖是公平的,反之,是不公平的。公平鎖的獲取,也就是等待時間最長的線程最優先獲取鎖,也可以說鎖獲取是順序的。ReentrantLock的公平與否,可以通過它的構造函數來決定。

    事實上,公平鎖往往沒有非公平鎖的效率高,但是,并不是任何場景都是以TPS作為唯一指標,公平鎖能夠減少“饑餓”發生的概率,等待越久的請求越能夠得到優先滿足。

    ReentrantLock是通過自定義同步器來實現鎖的獲取與釋放,我們以非公平鎖(默認)實現為例,對鎖的獲取和釋放進行詳解。

    獲取鎖:

    public?ReentrantLock()?{
    ????sync?=?new?NonfairSync();
    }

    即內部同步組件為非公平鎖,獲取鎖的代碼為:

    public?void?lock()?{
    ????sync.lock();
    }

    釋放鎖:

    成功獲取鎖的線程在完成業務邏輯之后,需要調用unlock()來釋放鎖:

    public?void?unlock()?{
    ????sync.release(1);
    }

    unlock()調用NonfairSync類的release(int)方法釋放鎖,release(int)方法是定義在AQS中的方法:

    public?final?boolean?release(int?arg)?{
    ????if?(tryRelease(arg))?{
    ????????Node?h?=?head;
    ????????if?(h?!=?null?&&?h.waitStatus?!=?0)
    ????????????unparkSuccessor(h);
    ????????return?true;
    ????}
    ????return?false;
    }

    tryRelease(int)是子類需要實現的方法:

    protected?final?boolean?tryRelease(int?releases)?{
    ????//?計算新的狀態值
    ????int?c?=?getState()?-?releases;
    ????//?判斷當前線程是否是持有鎖的線程,如果不是的話,拋出異常
    ????if?(Thread.currentThread()?!=?getExclusiveOwnerThread())
    ????????throw?new?IllegalMonitorStateException();
    ????boolean?free?=?false;
    ????//?新的狀態值是否為0,若為0,則表示該鎖已經完全釋放了,其他線程可以獲取同步狀態了
    ????if?(c?==?0)?{
    ????????free?=?true;
    ????????setExclusiveOwnerThread(null);
    ????}
    ????//?更新狀態值
    ????setState(c);
    ????return?free;
    }

    如果該鎖被獲取n次,那么前(n-1)次tryRelease(int)方法必須返回false,只有同步狀態完全釋放了,才能返回true。可以看到,該方法將同步狀態是否為0作為最終釋放的條件,當狀態為0時,將占有線程設為null,并返回true,表示釋放成功。

    以上就是小編今天的分享,希望可以幫助到大家。

    文檔

    java reentrantlock

    java reentrantlock是一個可重入且獨占式的鎖,它具有與使用synchronized監視器鎖相同的基本行為和語義,增加了輪詢、超時、中斷等高級功能,是一種遞歸無阻塞的同步機制,該鎖還支持獲取鎖時的公平和非公平選擇。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    python tkinter教程 js獲取日期 python numpy教程 opencv安裝教程python js獲取隨機數 ubuntu卸載mysql cad的基本命令 python中sorted函數的用法 mysql time類型 js class類 python中strip函數的用法 getclass方法 python中find函數的用法 java反射獲取屬性值 vue 調用子組件方法 python的range函數用法 js set去重 vue使用jquery python skimage armoury crate打不開 c語言struct用法 字符轉換成ascii碼 js date加一天 vue動態綁定style spring boot mysql配置 python 排序算法 python字典按值的大小排序 python 列表添加 python讀取json并解析 debug error怎么解決 python延時函數 python構造函數 python string函數 python類的繼承 python遞歸函數 python內置函數 python判斷字符串相等 python查看已安裝的包 python強制類型轉換 python input函數怎么用
    Top 亚洲AV永久无码精品网站在线观看| 亚洲中文字幕久久精品无码APP| 久久精品国产亚洲精品2020| 国产99精品一区二区三区免费 | 国内精品视频一区二区三区| 亚洲午夜精品久久久久久人妖| 久久久久99精品成人片牛牛影视| 日韩精品视频观看| 亚洲精品视频在线免费| 久久精品一区二区| 91老司机深夜福利精品视频在线观看 | 成品人和精品人的区别在哪里| 国产精品videossexohd| 国产精品亚洲专区在线观看| 久久久久久国产精品免费免费男同| 久久人搡人人玩人妻精品首页 | 中文字幕精品无码久久久久久3D日动漫| 国产精品白丝喷水在线观看| 亚洲精品无码专区| 99精品众筹模特私拍在线| 777国产偷窥盗摄精品品在线| 久久国产精品萌白酱免费| 精品在线免费观看| 亚洲精品自产拍在线观看| 精品人妻伦九区久久AAA片69| 精品免费AV一区二区三区| 国产成人久久精品麻豆二区| 日本精品视频一区二区三区| 麻豆国产精品一二三在线观看| 亚洲精品GV天堂无码男同| 国产精品综合AV一区二区国产馆| 亚洲精品乱码久久久久久下载 | 99久久免费精品国产72精品九九| 久久精品国产亚洲AV天海翼| 四虎国产精品永久在线播放| 精品国产一区二区三区色欲 | 亚洲国产精品成人久久| 久久综合精品视频| 麻豆国产在线精品国偷产拍 | 国产精品十八禁在线观看| 国产精品自拍电影|