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ù)這三個點做些擴展基本就可以了。
這些在實際在使用時,也需要我們更多的要考慮無鎖、使用鎖時盡量粒度要小一些。