Reentrantlock和synchronized的區(qū)別

Reentrantlock和synchronized是每個java開發(fā)的必修課,關于它們的資料十分豐富。但我經過搜索始終沒有找到對兩者進行系統對比的文章,這篇博客就因此應運而生了。
這里從頂至下對Reentrantlock和synchronized在實現上的異同進行了梳理,并沒有對具體設計使用上的區(qū)別多關注。各個層次的語言實現都是點到為止,沒有深入詳解(有些是因為比較簡單大家都知道,更多是比較底層我還不太清楚)。如果以后有時間我會對每個部分進行詳細的補充。

語言層次(從編寫到執(zhí)行的順序) Reentrantlock synchronized
Java代碼 volatile & CAS(Reentrantlock由AbstractQueuedSynchronizer實現,而AQS則由volatile關鍵字和Unsafe這個類提供的CAS操作實現) 無(本身就是關鍵字)
JVM字節(jié)碼 volatile:變量修飾符ACC_VOLATILE;CAS:無(直接引用的本地方法) synchronized同步方法:方法修飾符ACC_SYNCHRONIZED;synchronized同步代碼塊:指令monitorenter 和 monitorexit
c語言/匯編語言(解釋字節(jié)碼) volatile:bytecodeInterpreter.cpp(有使用c語言中的volatile,看不太懂);CAS:unsafe.cpp(通過Atomic::cmpxchg_ptr進行CAS操作) synchronizer.cpp(通過Atomic::cmpxchg_ptr進行CAS操作)

刨除因為設計而產生的功能以及使用上的不同,Reentrantlock和synchronized最主要的區(qū)別在于Reentrantlock的主要實現在java代碼中而synchronized的主要實現在JVM中。
還可以看出Reentrantlock和synchronized在最底層都由Atomic::cmpxchg函數來完成,本質上都是由同一個底層實現的。而Atomic::cmpxchg函數在不同的平臺有不同的匯編實現。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本文是我自己在秋招復習時的讀書筆記,整理的知識點,也是為了防止忘記,尊重勞動成果,轉載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 11,652評論 4 56
  • 不會有人愿意將初次相識的你,歸類為一生的朋友。如果有,請珍惜他(她)。 那是第一次相遇,女孩還是一...
    LOVE田心閱讀 349評論 0 0
  • 2018年6月18日 周一 多云 今天是我國的傳統節(jié)日~端午節(jié),插艾草,吃粽子,帶香包,系五彩線。...
    徐安然兒閱讀 200評論 0 1
  • 想到情商與銷售的關系,作為一名優(yōu)秀的銷售人員應該具備良好的素質,情商也必不可缺之一。 看了老師發(fā)給我們的淺...
    周文歡_xh閱讀 253評論 0 1
  • 寫手圈30天連續(xù)寫作第19天 梁超文我發(fā)現你最近沒有什么激情,連崗位都不去站! 剛才坐在辦公區(qū)玩手機,同事玲玲忽然...
    梁超文閱讀 400評論 0 1

友情鏈接更多精彩內容