Synchronized和Lock的區(qū)別

Synchronized和Lock的區(qū)別:Synchronized編碼更簡單,鎖機(jī)制由JVM維護(hù),在競爭不激烈的情況下性能更好。Lock功能更強(qiáng)大更靈活,競爭激烈時(shí)性能較好。

  1. 性能不一樣:資源競爭激勵(lì)的情況下,lock性能會比synchronize好,競爭不激勵(lì)的情況下,synchronize比lock性能好,synchronize會根據(jù)鎖的競爭情況,從偏向鎖-->輕量級鎖-->重量級鎖升級,而且編程更簡單。
  2. 鎖機(jī)制不一樣:synchronize是在JVM層面實(shí)現(xiàn)的,系統(tǒng)會監(jiān)控鎖的釋放與否。lock是JDK代碼實(shí)現(xiàn)的,需要手動(dòng)釋放,在finally塊中釋放。可以采用非阻塞的方式獲取鎖。
  3. Synchronized的編程更簡潔,lock的功能更多更靈活,缺點(diǎn)是一定要在finally里面 unlock()資源才行。
  4. 用法不一樣:synchronize可以用在代碼塊上,方法上。lock只能寫在代碼里,不能直接修改方法。

Lock支持的功能:

  • 公平鎖:Synchronized是非公平鎖,Lock支持公平鎖,默認(rèn)非公平鎖
  • 可中斷鎖:ReentrantLock提供了lockInterruptibly()的功能,可以中斷爭奪鎖的操作,搶鎖的時(shí)候會check是否被中斷,中斷直接拋出異常,退出搶鎖。而Synchronized只有搶鎖的過程,不可干預(yù),直到搶到鎖以后,才可以編碼控制鎖的釋放。
  • 快速反饋鎖:ReentrantLock提供了trylock() 和 trylock(tryTimes)的功能,不等待或者限定時(shí)間等待獲取鎖,更靈活??梢员苊馑梨i的發(fā)生。
  • 讀寫鎖:ReentrantReadWriteLock類實(shí)現(xiàn)了讀寫鎖的功能,類似于Mysql,鎖自身維護(hù)一個(gè)計(jì)數(shù)器,讀鎖可以并發(fā)的獲取,寫鎖只能獨(dú)占。而synchronized全是獨(dú)占鎖
  • Condition:ReentrantLock提供了比Sync更精準(zhǔn)的線程調(diào)度工具,Condition,一個(gè)lock可以有多個(gè)Condition,比如在生產(chǎn)消費(fèi)的業(yè)務(wù)下,一個(gè)鎖通過控制生產(chǎn)Condition和消費(fèi)Condition精準(zhǔn)控制。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容