synchronized
: 是JVM實現(xiàn)的一種鎖姐军, 用于同步方法和代碼塊铁材,執(zhí)行完后自動釋放鎖。其中鎖的獲取和釋放分別是monitorenter和monitorexit指令庶弃,該鎖在實現(xiàn)上分為了偏向鎖衫贬、輕量級鎖和重量級鎖,其中偏向鎖在1.6是默認開啟的歇攻,輕量級鎖在多線程競爭的情況下會膨脹成重量級鎖固惯,有關鎖的數(shù)據(jù)都保存在對象頭中。
Lock
:Lock是一個鎖的接口缴守,提供獲取鎖和解鎖的方法(lock,trylock,unlock)
ReentrantLock
:ReentrantLock是k是Lock接口的實現(xiàn)類葬毫,基于AQS實現(xiàn)的,在AQS內(nèi)部會保存一個狀態(tài)變量state,通過CAS修改該變量的值屡穗,修改成功的線程表示獲取到該鎖贴捡,沒有修改成功,或者發(fā)現(xiàn)狀態(tài)state已經(jīng)是加鎖狀態(tài)村砂,則通過一個Waiter對象封裝線程烂斋,添加到等待隊列中,并掛起等待被喚醒。
ReadWriteLock
:可以實現(xiàn)讀寫鎖汛骂,當讀取的時候線程會獲得read鎖罕模,其他線程也可以獲得read鎖同時并發(fā)的去讀取,但是寫程序運行獲取到write鎖的時候帘瞭,其他線程是不能進行操作的淑掌,因為write是排它鎖,而上面介紹的兩種不管你是read還是write沒有搶到鎖的線程都會被阻塞或者中斷蝶念,它也是個接口抛腕,里面定義了兩種方法readLock()和writeLock(),他的一個實現(xiàn)類是ReentrantReadWriteLock媒殉。