成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何使用lock.lock()

本篇內(nèi)容介紹了“如何使用lock.lock()”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

站在用戶的角度思考問題,與客戶深入溝通,找到含山網(wǎng)站設(shè)計(jì)與含山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋含山地區(qū)。

lock.lock()

Oracle 文檔中在介紹鎖的使用時(shí)有一段代碼,我們以 ReentrantLock 舉例,代碼如下所示:

ReentrantLock lock = new ReentrantLock(); lock.lock(); try {     // access the resource protected by this lock } finally {     lock.unlock(); }

Q:為什么要把 lock.unlock() 放到 finally 語句塊?

A:為了保證當(dāng)前線程執(zhí)行過程中出現(xiàn)異常時(shí),鎖依然能被釋放掉,避免死鎖的產(chǎn)生

我們來改動(dòng)一下上面的代碼,看看會(huì)產(chǎn)生什么樣的影響

ReentrantLock lock = new ReentrantLock(); try {     lock.lock();     // access the resource protected by this lock } finally {     lock.unlock(); }

看著沒問題呀,為啥文章開始不建議這么用?先說下可能會(huì)存在的問題

異常堆棧丟失

假設(shè)在 lock.lock 方法中加鎖異常(千萬不要杠),那么會(huì)進(jìn)入 finally 語句塊中進(jìn)行解鎖

繼續(xù)跟進(jìn),看一下 lock.unlock() 源碼中是如何處理的

如何使用lock.lock()

lock.lock() 拋出異常有可能還沒獲取到鎖,那么 解鎖源碼中將當(dāng)前線程比較擁有鎖線程肯定是不相等的,所以會(huì)拋出 IMSE  (IllegalMonitorStateException)異常

我重寫了 ReentrantLock 加鎖代碼的邏輯,在里面拋出了異常,一起看下會(huì)出現(xiàn)什么情況

final void lock() {     // 模擬加鎖未成功就拋出異常     if (true) {         throw new RuntimeException("報(bào)錯(cuò)啦?。。?quot;);     }     if (compareAndSetState(0, 1))         setExclusiveOwnerThread(Thread.currentThread());     else         acquire(1); }

根據(jù)下圖可以看出 加鎖時(shí)異常堆棧被 "吞掉了",悄無聲息的就沒了。當(dāng)然這只是舉例,但是誰能保證加鎖未成功時(shí)不會(huì)拋出異常呢

如何使用lock.lock()

真實(shí)存在的 BUG

上面代碼示例中都是在 try 的第一行寫 lock,出現(xiàn)問題的可能性極低。這里給大家提供一個(gè)反面教材,千萬千萬不要有這種類似行為

如何使用lock.lock()

示例代碼中把 lock 放到了 try 語句塊里,然后 lock 加鎖前面還有可能會(huì)產(chǎn)生異常的代碼,這種就涼了,誰用誰涼的那種

“如何使用lock.lock()”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

當(dāng)前名稱:如何使用lock.lock()
標(biāo)題鏈接:http://jinyejixie.com/article0/pgsdoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、建站公司小程序開發(fā)、搜索引擎優(yōu)化、網(wǎng)站制作企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
嘉黎县| 长泰县| 灯塔市| 石家庄市| 陈巴尔虎旗| 开江县| 宿州市| 岱山县| 肃北| 永平县| 习水县| 泰宁县| 赤峰市| 长宁县| 讷河市| 兴业县| 锡林浩特市| 芮城县| 汕尾市| 台湾省| 漳浦县| 丰顺县| 临洮县| 温州市| 郯城县| 安康市| 西吉县| 出国| 临西县| 封丘县| 孝感市| 大邑县| 大英县| 淮阳县| 咸丰县| 阳信县| 阜宁县| 偏关县| 和政县| 屏山县| 长岭县|