内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何使用lock.lock()

本篇內(nèi)容介紹了“如何使用lock.lock()”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(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è)郵箱。業(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 語(yǔ)句塊?

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

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

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

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

異常堆棧丟失

假設(shè)在 lock.lock 方法中加鎖異常(千萬(wàn)不要杠),那么會(huì)進(jìn)入 finally 語(yǔ)句塊中進(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í)異常堆棧被 "吞掉了",悄無(wú)聲息的就沒了。當(dāng)然這只是舉例,但是誰(shuí)能保證加鎖未成功時(shí)不會(huì)拋出異常呢

如何使用lock.lock()

真實(shí)存在的 BUG

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

如何使用lock.lock()

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

“如何使用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://www.rwnh.cn/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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
利川市| 攀枝花市| 大足县| 嘉善县| 临夏县| 许昌县| 雷山县| 新民市| 沛县| 景谷| 武山县| 平罗县| 呈贡县| 射洪县| 攀枝花市| 洛阳市| 苏尼特右旗| 阜平县| 温泉县| 沽源县| 广丰县| 克什克腾旗| 内丘县| 灌云县| 通许县| 墨玉县| 西安市| 万载县| 阿荣旗| 新河县| 四会市| 松潘县| 永川市| 洛隆县| 壤塘县| 翼城县| 樟树市| 五峰| 常熟市| 马龙县| 公安县|