亚洲精品国产精品乱码视色,下载应用成人电影AVapp,成人影院下载视频

      <track id="gfhue"><i id="gfhue"></i></track><input id="gfhue"></input>

      1. 更多精彩內(nèi)容,歡迎關(guān)注:

        視頻號(hào)
        視頻號(hào)

        抖音
        抖音

        快手
        快手

        微博
        微博

        當(dāng)前位置:首頁 科技百科 java reentrantlock

        java reentrantlock

        文檔

        java reentrantlock

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

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

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

        ReentrantLock的內(nèi)部類Sync繼承了AQS,分為公平鎖FairSync和非公平鎖NonfairSync。如果在絕對(duì)時(shí)間上,先對(duì)鎖進(jìn)行獲取的請(qǐng)求你一定先被滿足,那么這個(gè)鎖是公平的,反之,是不公平的。公平鎖的獲取,也就是等待時(shí)間最長的線程最優(yōu)先獲取鎖,也可以說鎖獲取是順序的。ReentrantLock的公平與否,可以通過它的構(gòu)造函數(shù)來決定。

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

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

        獲取鎖:

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

        即內(nèi)部同步組件為非公平鎖,獲取鎖的代碼為:

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

        釋放鎖:

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

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

        unlock()調(diào)用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)是子類需要實(shí)現(xiàn)的方法:

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

        如果該鎖被獲取n次,那么前(n-1)次tryRelease(int)方法必須返回false,只有同步狀態(tài)完全釋放了,才能返回true??梢钥吹?,該方法將同步狀態(tài)是否為0作為最終釋放的條件,當(dāng)狀態(tài)為0時(shí),將占有線程設(shè)為null,并返回true,表示釋放成功。

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

        文檔

        java reentrantlock

        java reentrantlock是一個(gè)可重入且獨(dú)占式的鎖,它具有與使用synchronized監(jiān)視器鎖相同的基本行為和語義,增加了輪詢、超時(shí)、中斷等高級(jí)功能,是一種遞歸無阻塞的同步機(jī)制,該鎖還支持獲取鎖時(shí)的公平和非公平選擇。
        推薦度:
        為你推薦
        資訊專欄
        熱門視頻
        相關(guān)推薦
        python tkinter教程 js獲取日期 python numpy教程 opencv安裝教程python js獲取隨機(jī)數(shù) ubuntu卸載mysql cad的基本命令 python中sorted函數(shù)的用法 mysql time類型 js class類 python中strip函數(shù)的用法 getclass方法 python中find函數(shù)的用法 java反射獲取屬性值 vue 調(diào)用子組件方法 python的range函數(shù)用法 js set去重 vue使用jquery python skimage armoury crate打不開 c語言struct用法 字符轉(zhuǎn)換成ascii碼 js date加一天 vue動(dòng)態(tài)綁定style spring boot mysql配置 python 排序算法 python字典按值的大小排序 python 列表添加 python讀取json并解析 debug error怎么解決 python延時(shí)函數(shù) python構(gòu)造函數(shù) python string函數(shù) python類的繼承 python遞歸函數(shù) python內(nèi)置函數(shù) python判斷字符串相等 python查看已安裝的包 python強(qiáng)制類型轉(zhuǎn)換 python input函數(shù)怎么用
        Top