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

全國咨詢/投訴熱線:400-618-4000

問答>JavaEE>lock和synchronized到底啥區(qū)別?

lock和synchronized到底啥區(qū)別?

來源傳智教育2022年03月17日 11時13分09秒

  lock和synchronized區(qū)別主要體現(xiàn)在5個方面:

      1.語法層面

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

  * Lock 是接口,源碼由 jdk 提供,用 java 語言實現(xiàn)

  * 使用 synchronized 時,退出同步代碼塊鎖會自動釋放,而使用 Lock 時,需要手動調(diào)用 unlock 方法釋放鎖

  2.功能層面

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

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

  * Lock 有適合不同場景的實現(xiàn),如 ReentrantLock, ReentrantReadWriteLock

  3.性能層面

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

  * 在競爭激烈時,Lock 的實現(xiàn)通常會提供更好的性能

  4.公平鎖

  公平鎖的公平體現(xiàn)

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

  公平鎖是指**未處于阻塞隊列**中的線程來爭搶鎖,如果隊列不為空,則老實到隊尾等待

  非公平鎖是指**未處于阻塞隊列**中的線程來爭搶鎖,與隊列頭喚醒的線程去競爭,誰搶到算誰的

  公平鎖會降低吞吐量,一般不用

  5.條件變量

  * ReentrantLock 中的條件變量功能類似于普通 synchronized 的 wait,notify,用在當(dāng)線程獲得鎖后,發(fā)現(xiàn)條件不滿足時,臨時等待的鏈表結(jié)構(gòu)

  * 與 synchronized 的等待集合不同之處在于,ReentrantLock 中的條件變量可以有多個,可以實現(xiàn)更精細(xì)的等待、喚醒控制。

和我們在線交談!