synchronized

synchronized、AtomicXXX、ReentrantLock

synchronized屬于java提供的關(guān)鍵字,它的實現(xiàn)是依賴于 jvm 借助于cpu指令的字節(jié)碼來實現(xiàn)的。


作用于調(diào)用對象意味著同一個類創(chuàng)建的兩個不同實例調(diào)用同一方法或者修飾代碼塊,線程之間沒有影響,各自正常工作。
作用于所有對象意味著同一個類創(chuàng)建的兩個不同實例調(diào)用同一靜態(tài)方法或者修飾類,線程之間同樣要遵循獲取鎖原則,同一時間只有一個實例能獲取鎖

Lock 依賴特殊的 cpu 指令,通過代碼實現(xiàn)

AtomicXXX本質(zhì)上其實不是鎖,而是通過CAS自旋(循環(huán)嘗試去更新,直至成功)與volatile變量互相配合來保證線程安全的更新

ReentrantLock則是基于AQS進行的實現(xiàn),核心是借助里面CLH隊列實現(xiàn)鎖的排隊策略

根據(jù)這三個點做些擴展基本就可以了。

這些在實際在使用時,也需要我們更多的要考慮無鎖、使用鎖時盡量粒度要小一些。

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

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

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