深入理解java虛擬機(jī)-第13章-線程安全與鎖優(yōu)化
線程安全
java語言中的線程安全
1 不可變。Immutable 的對象一定是線程安全的
2 絕對線程安全 一個類要達(dá)到不管運行時環(huán)境如何,調(diào)用者都不需要額外的同步措施,通常需要付出很大甚至是不切實際的代價,在java api中標(biāo)注自己是線程安全的類,大多數(shù)都不是絕對的線程安全
3 相對線程安全
4 線程兼容 對象本身不是線程安全的,但是可以通過在調(diào)用端正確地使用同步手段來保證對象在并發(fā)環(huán)境中可以安全使用
5 線程對立
線程安全的實現(xiàn)方法
1 互斥同步 Murual Exclusion & Synchronization
常見的并發(fā)正確性保障手機(jī),同步是指多個線程并發(fā)訪問共享數(shù)據(jù)時,保存證共享數(shù)據(jù)在同一時刻只被一個線程使用
最基本的互斥手段是synchronized關(guān)鍵字。
還可以使用java.util.concurrent包中的鎖來實現(xiàn)同步 ReentrantLock,
JDK1.6對synchronized做了優(yōu)化,效率與ReentrantLock基本上是完全持平了。
2 非阻塞同步
基于沖突檢測的樂觀并發(fā)策略
CAS操作 Compare-and-Swap
3 無同步方案
鎖優(yōu)化
1、自旋鎖與自適應(yīng)自旋
2、鎖消除
3、鎖粗化
4、經(jīng)量級鎖
5、偏向鎖
整本書 可以在Blog :《深入理解Java虛擬機(jī)》筆記 中來統(tǒng)查看要點。
相關(guān)文章:
1. 什么是python的自省2. php模擬實現(xiàn)斗地主發(fā)牌3. vue 使用localstorage實現(xiàn)面包屑的操作4. spring acegi security 1.0.0 發(fā)布5. 理解PHP5中static和const關(guān)鍵字6. Python random庫使用方法及異常處理方案7. Vue封裝一個TodoList的案例與瀏覽器本地緩存的應(yīng)用實現(xiàn)8. Vuex localStorage的具體使用9. MyBatis中的JdbcType映射使用詳解10. jQuery 實現(xiàn)DOM元素拖拽交換位置的實例代碼

網(wǎng)公網(wǎng)安備