教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢(xún)/投訴熱線(xiàn):400-618-4000

lock和synchronized有什么區別?【java面試題】

更新時(shí)間:2022年01月10日17時(shí)24分 來(lái)源:傳智教育 瀏覽次數:

目標

掌握 lock 與 synchronized 的區別
理解 ReentrantLock 的公平、非公平鎖

理解 ReentrantLock 中的條件變量

lock 與 synchronized 的區別有三個(gè)層面

1.不同點(diǎn)

語(yǔ)法層面

* synchronized 是關(guān)鍵字,源碼在 jvm 中,用 c++ 語(yǔ)言實(shí)現

* Lock 是接口,源碼由 jdk 提供,用 java 語(yǔ)言實(shí)現

* 使用 synchronized 時(shí),退出同步代碼塊鎖會(huì )自動(dòng)釋放,而使用 Lock 時(shí),需要手動(dòng)調用 unlock 方法釋放鎖

2.功能層面

* 二者均屬于悲觀(guān)鎖、都具備基本的互斥、同步、鎖重入功能

* Lock 提供了許多 synchronized 不具備的功能,例如獲取等待狀態(tài)、公平鎖、可打斷、可超時(shí)、多條件變量

* Lock 有適合不同場(chǎng)景的實(shí)現,如 ReentrantLock, ReentrantReadWriteLock

3.性能層面

* 在沒(méi)有競爭時(shí),synchronized 做了很多優(yōu)化,如偏向鎖、輕量級鎖,性能不賴(lài)

* 在競爭激烈時(shí),Lock 的實(shí)現通常會(huì )提供更好的性能

4.公平鎖

公平鎖的公平體現

已經(jīng)處在阻塞隊列**中的線(xiàn)程(不考慮超時(shí))始終都是公平的,先進(jìn)先出

公平鎖是指**未處于阻塞隊列**中的線(xiàn)程來(lái)爭搶鎖,如果隊列不為空,則老實(shí)到隊尾等待

非公平鎖是指**未處于阻塞隊列**中的線(xiàn)程來(lái)爭搶鎖,與隊列頭喚醒的線(xiàn)程去競爭,誰(shuí)搶到算誰(shuí)的

公平鎖會(huì )降低吞吐量,一般不用

5.條件變量

* ReentrantLock 中的條件變量功能類(lèi)似于普通 synchronized 的 wait,notify,用在當線(xiàn)程獲得鎖后,發(fā)現條件不滿(mǎn)足時(shí),臨時(shí)等待的鏈表結構

* 與 synchronized 的等待集合不同之處在于,ReentrantLock 中的條件變量可以有多個(gè),可以實(shí)現更精細的等待、喚醒控制

代碼說(shuō)明

day02.TestReentrantLock 用較為形象的方式演示 
ReentrantLock 的內部結構




猜你喜歡:

Java培訓之java難點(diǎn)解析(十五)-Lock接口

Synchronized原理是什么?Synchronized原理詳解

Java視頻教程之synchronized原理剖析與優(yōu)化

傳智教育java開(kāi)發(fā)培訓

0 分享到:
和我們在線(xiàn)交談!