深入理解java虛擬機-第13章-線程安全與鎖優(yōu)化
線程安全
java語言中的線程安全
1 不可變。Immutable 的對象一定是線程安全的
2 絕對線程安全 一個類要達到不管運行時環(huán)境如何,調用者都不需要額外的同步措施,通常需要付出很大甚至是不切實際的代價,在java api中標注自己是線程安全的類,大多數(shù)都不是絕對的線程安全
3 相對線程安全
4 線程兼容 對象本身不是線程安全的,但是可以通過在調用端正確地使用同步手段來保證對象在并發(fā)環(huán)境中可以安全使用
5 線程對立
線程安全的實現(xiàn)方法
1 互斥同步 Murual Exclusion & Synchronization
常見的并發(fā)正確性保障手機,同步是指多個線程并發(fā)訪問共享數(shù)據(jù)時,保存證共享數(shù)據(jù)在同一時刻只被一個線程使用
最基本的互斥手段是synchronized關鍵字。
還可以使用java.util.concurrent包中的鎖來實現(xiàn)同步 ReentrantLock,
JDK1.6對synchronized做了優(yōu)化,效率與ReentrantLock基本上是完全持平了。
2 非阻塞同步
基于沖突檢測的樂觀并發(fā)策略
CAS操作 Compare-and-Swap
3 無同步方案
鎖優(yōu)化
1、自旋鎖與自適應自旋
2、鎖消除
3、鎖粗化
4、經(jīng)量級鎖
5、偏向鎖
整本書 可以在Blog :《深入理解Java虛擬機》筆記 中來統(tǒng)查看要點。
相關文章:
