久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > Synchronized和Lock的對比和選擇

Synchronized和Lock的對比和選擇

來源:千鋒教育
發(fā)布人:syq
時(shí)間: 2022-09-08 17:11:44 1662628304

  存在層次上

  synchronized: Java的關(guān)鍵字,在jvm層面上

  Lock: 是一個(gè)接口

  鎖的釋放

Synchronized和Lock

  synchronized: 1、以獲取鎖的線程執(zhí)行完同步代碼,釋放鎖 2、線程執(zhí)行發(fā)生異常,jvm會(huì)讓線程釋放鎖

  Lock: 在finally中必須釋放鎖,不然容易造成線程死鎖

  鎖的獲取

  synchronized: 假設(shè)A線程獲得鎖,B線程等待。如果A線程阻塞,B線程會(huì)一直等待

  Lock: 分情況而定,Lock有多個(gè)鎖獲取的方式,大致就是可以嘗試獲得鎖,線程可以不用一直等待(可以通過tryLock判斷有沒有鎖)

  鎖的釋放(死鎖產(chǎn)生)

  synchronized: 在發(fā)生異常時(shí)候會(huì)自動(dòng)釋放占有的鎖,因此不會(huì)出現(xiàn)死鎖

  Lock: 發(fā)生異常時(shí)候,不會(huì)主動(dòng)釋放占有的鎖,必須手動(dòng)unlock來釋放鎖,可能引起死鎖的發(fā)生

  鎖的狀態(tài)

  synchronized: 無法判斷

  Lock: 可以判斷

  鎖的類型

  synchronized: 可重入 不可中斷 非公平

  Lock: 可重入 可判斷 可公平(兩者皆可)

  性能

  synchronized: 少量同步

  Lock: 大量同步

  Lock可以提高多個(gè)線程進(jìn)行讀操作的效率。(可以通過readwritelock實(shí)現(xiàn)讀寫分離)

  在資源競爭不是很激烈的情況下,Synchronized的性能要優(yōu)于ReetrantLock,但是在資源競爭很激烈的情況下,Synchronized的性能會(huì)下降幾十倍,但是ReetrantLock的性能能維持常態(tài);

  ReentrantLock提供了多樣化的同步,比如有時(shí)間限制的同步,可以被Interrupt的同步(synchronized的同步是不能Interrupt的)等。在資源競爭不激烈的情形下,性能稍微比synchronized差點(diǎn)點(diǎn)。但是當(dāng)同步非常激烈的時(shí)候,synchronized的性能一下子能下降好幾十倍。而ReentrantLock確還能維持常態(tài)。

  調(diào)度

  synchronized: 使用Object對象本身的wait 、notify、notifyAll調(diào)度機(jī)制

  Lock: 可以使用Condition進(jìn)行線程之間的調(diào)度

  用法

  synchronized: 在需要同步的對象中加入此控制,synchronized可以加在方法上,也可以加在特定代碼塊中,括號中表示需要鎖的對象。

  Lock: 一般使用ReentrantLock類做為鎖。在加鎖和解鎖處需要通過lock()和unlock()顯示指出。所以一般會(huì)在finally塊中寫unlock()以防死鎖。

  底層實(shí)現(xiàn)

  synchronized: 底層使用指令碼方式來控制鎖的,映射成字節(jié)碼指令就是增加來兩個(gè)指令:monitorenter和monitorexit。當(dāng)線程執(zhí)行遇到monitorenter指令時(shí)會(huì)嘗試獲取內(nèi)置鎖,如果獲取鎖則鎖計(jì)數(shù)器+1,如果沒有獲取鎖則阻塞;當(dāng)遇到monitorexit指令時(shí)鎖計(jì)數(shù)器-1,如果計(jì)數(shù)器為0則釋放鎖。

  Lock: 底層是CAS樂觀鎖,依賴AbstractQueuedSynchronizer類,把所有的請求線程構(gòu)成一個(gè)CLH隊(duì)列。而對該隊(duì)列的操作均通過Lock-Free(CAS)操作。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
軟件定制開發(fā)中的敏捷開發(fā)是什么?

軟件定制開發(fā)中的敏捷開發(fā)是什么軟件定制開發(fā)中的敏捷開發(fā),從宏觀上看,是一個(gè)高度關(guān)注人員交互,持續(xù)開發(fā)與交付,接受需求變更并適應(yīng)環(huán)境變化...詳情>>

2023-10-14 13:24:57
什么是PlatformIo?

PlatformIO是什么PlatformIO是一個(gè)全面的物聯(lián)網(wǎng)開發(fā)平臺(tái),它為眾多硬件平臺(tái)和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡化了開發(fā)過程,并能兼容各種...詳情>>

2023-10-14 12:55:06
云快照與自動(dòng)備份有什么區(qū)別?

1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時(shí)間點(diǎn)后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動(dòng)備份的主要目標(biāo)...詳情>>

2023-10-14 12:48:59
服務(wù)器為什么要用Linux?

服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢和特點(diǎn)。包括其...詳情>>

2023-10-14 12:34:11
ORM解決的主要問題是什么?

ORM(對象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲(chǔ),而在面向?qū)ο?..詳情>>

2023-10-14 12:26:19
快速通道