欢迎访问亚美体育·(中国)官方网站

走进亚美体育 公司简介 品质管理 专利证书 客户服务 产品中心 卧式 立式 技术支持 亚美体育官方app下载 公司资讯 会展资讯 联系我们 联系我们 在线留言 亚美体育app官方
WELCOME | 欢迎访问

亚美体育app现在叫什么|韩国空间|深入理解java内置锁(synchroniz

2024-02-06 来源:亚美体育机械

  亞美體育亞美體育亞美機械制造亞美體育app官方財經消息亞美體育官方app下載這篇文章主要介紹了Java多線程之內置鎖(synchronized)和顯式鎖(ReentrantLock)的深入理解新的和用法,具有一定參考價值,需要的朋友可以了解下。

  多線程編程中,當代碼需要同步時我們會用到鎖。Java為我們提供了內置鎖(synchronized)和顯式鎖(ReentrantLock)兩種同步方式。顯式鎖是JDK1.5引入的,這兩種鎖有什麼異同呢?是僅僅增加了一種選擇還是另有其因?本文為您一探究竟。

  內置鎖使用起來非常方便,不需要顯式的獲取和釋放亞美體育app現在叫什麼,任何一個對象都能作為一把內置鎖韓國空間。使用內置鎖能夠解決大部分的同步場景。“任何一個對象都能作為一把內置鎖”也意味著出現synchronized關鍵字的地方亞美體育app現在叫什麼,都有一個對象與之關聯,具體說來:

  顯式鎖(ReentrantLock)正式為了解決這些靈活需求而生。ReentrantLock的字面意思是可重入鎖,可重入的意思是線程可以同時多次請求同一把鎖,而不會自己導致自己死鎖亞美體育app現在叫什麼。下面是內置鎖和顯式鎖的區別:

  可中斷:你一定見過InterruptedException,很多跟多線程相關的方法會拋出該異常,這個異常並不是一個缺陷導致的負擔,而是一種必須,或者說是一件好事亞美體育app現在叫什麼。可中斷性給我們提供了一種讓線程提前結束的方式(而不是非得等到線程執行結束),這對于要取消耗時的任務非常有用。對于內置鎖,線程拿不到內置鎖就會一直等待,除了獲取鎖沒有其他辦法能夠讓其結束等待。RenentrantLock.lockInterruptibly()給我們提供了一種以中斷結束等待的方式。

  條件隊列(condition queue):線程在獲取鎖之後,可能會由于等待某個條件發生而進入等待狀態(內置鎖通過Object.wait()方法,顯式鎖通過Condition.await()方法),進入等待狀態的線程會掛起並自動釋放鎖,這些線程會被放入到條件隊列當中。synchronized對應的只有一個條件隊列韓國空間,而ReentrantLock可以有多個條件隊列,多個隊列有什麼好處呢?請往下看。

  條件謂詞:線程在獲取鎖之後,有時候還需要等待某個條件滿足才能做事情,比如生產者需要等到“緩存不滿”才能往隊列裡放入消息,而消費者需要等到“緩存非空”才能從隊列裡取出消息。這些條件被稱作條件謂詞,線程需要先獲取鎖,然後判斷條件謂詞是否滿足,如果不滿足就不往下執行,相應的線程就會放棄執行權並自動釋放鎖。使用同一把鎖的不同的線程可能有不同的條件謂詞,如果只有一個條件隊列韓國空間,當某個條件謂詞滿足時就無法判斷該喚醒條件隊列裡的哪一個線程;但是如果每個條件謂詞都有一個單獨的條件隊列亞美體育app現在叫什麼,當某個條件滿足時我們就知道應該喚醒對應隊列上的線程(內置鎖通過Object.notify()或者Object.notifyAll()方法喚醒,顯式鎖通過Condition.signal()或者Condition.signalAll()方法喚醒)。這就是多個條件隊列的好處。

  使用內置鎖時,對象本身既是一把鎖又是一個條件隊列;使用顯式鎖時,RenentrantLock的對象是鎖,條件隊列通過RenentrantLock.newCondition()方法獲取,多次調用該方法可以得到多個條件隊列。

  注意,上述代碼將unlock()放在finally塊裡韓國空間,這麼做是必需的。顯式鎖不像內置鎖那樣會自動釋放亞美體育app現在叫什麼,使用顯式鎖一定要在finally塊中手動釋放,如果獲取鎖後由于異常的原因沒有釋放鎖,那麼這把鎖將永遠得不到釋放!將unlock()放在finally塊中,保證無論發生什麼都能夠正常釋放。

  內置鎖能夠解決大部分需要同步的場景,只有在需要額外靈活性是才需要考慮顯式鎖,比如可定時、可中斷、多等待隊列等特性。

  顯式鎖雖然靈活,但是需要顯式的申請和釋放,並且釋放一定要放到finally塊中,否則可能會因為異常導致鎖永遠無法釋放!這是顯式鎖最明顯的缺點。

  這篇文章主要推薦了一些值得Java程序猿閱讀的書籍,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

  這篇文章主要介紹了首先用蒙塔卡洛算法求圓週率近似值,然後根據此近似值輸出圓的週長和面積,具有一定參考價值,需要的朋友可以了解下。...

  這篇文章主要介紹了Java隨機密碼生成並和郵箱、手機號匹配的相關資料,需要的朋友可以參考下 ...

  這篇文章主要介紹了java採集京東的全國行政區劃數據示例,保存成json形式韓國空間,如想轉換到數據庫只需反序列化為對象保存到數據庫即可 ...

  最近在搞android的項目,在開發過程中遇到了好多問題,今天小編給大家說下mybatis連接MySQL數據庫的方法,感興趣的朋友跟著小編一起學習吧 ...

  這篇文章主要介紹了intellij idea隱藏.iml和.idea等自動生成文件的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋...

0512-57664275 0512-36822333
亚美体育 | 亚美体育 | 亚美体育 | 亚美体育 | 亚美体育 | 网站地图 | 网站地图_m |