java鎖機制之CAS、synchronized、ReentrantLock

CAS原理:

CAS(compare and swap)是java.util.concurrent併發的包中用的很多,是這個包的核心,因爲它不通過JVM,可以直接利用JNI調用CPU 的cmpxchg(彙編指令),不用經歷內核態阻塞這一過程,利用JNI來完成Java的非阻塞算法,實現原子操作。CAS中有三個操作數,內存值v,原預期值a和即將修改的預期值b,若果內存值v與a值相匹配,那麼將b值修改到內存值v,反之保持原v值。CAS可以說是個樂觀鎖技術,若果有多個線程同時操作一個共享變量時,只有其中一個線程可以修改,其他的線程都將失敗,進行下一次競爭嘗試


synchronized:

在jdk6後對synchronized進行了優化,也是從減少通過內核態操作,來提高性能,底層實現主要依靠Lock-Free隊列,類似CAS方式,提高吞吐量,分非公平性鎖,線程較少時跟CAS性能差不多,在線程衝突比較大的情況下性能比CAS要高很多。

ReentrantLock: 

ReentrantLock的實現也是利用對CAS進行循環調用來實現加鎖,性能好,可以避免線程進入內核態的阻塞狀態,它是在jdk1.5之後提出的API層面的互斥鎖。利用lock()和unlock()結合try/finally實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章