摘要:如果你知道該成員變量會被多個線程訪問,如計數(shù)器價格等,你最好是將其設(shè)置為。但是對一個型的或變量的讀寫是原子。一種實踐是用修飾和變量,使其能按原子類型來讀寫。修復(fù)符的另一個作用是提供內(nèi)存屏障,例如在分布式框架中的應(yīng)用。
volatile能使得一個非原子操作變成原子操作嗎?
一個典型的例子是在類中有一個 long 類型的成員變量。如果你知道該成員變量會被多個線程訪問,如計數(shù)器、價格等,你最好是將其設(shè)置為 volatile。為什么?因為 Java 中讀取 long 類型變量不是原子的,需要分成兩步,如果一個線程正在修改該 long 變量的值,另一個線程可能只能看到該值的一半(前 32 位)。但是對一個 volatile 型的 long 或 double 變量的讀寫是原子。
一種實踐是用 volatile 修飾 long 和 double 變量,使其能按原子類型來讀寫。double 和 long 都是64位寬,因此對這兩種類型的讀是分為兩部分的,第一次讀取第一個 32 位,然后再讀剩下的 32 位,這個過程不是原子的,但 Java 中 volatile 型的 long 或 double 變量的讀寫是原子的。volatile 修復(fù)符的另一個作用是提供內(nèi)存屏障(memory barrier),例如在分布式框架中的應(yīng)用。簡單的說,就是當(dāng)你寫一個 volatile 變量之前,Java 內(nèi)存模型會插入一個寫屏障(write barrier),讀一個 volatile 變量之前,會插入一個讀屏障(read barrier)。意思就是說,在你寫一個 volatile 域時,能保證任何線程都能看到你寫的值,同時,在寫之前,也能保證任何數(shù)值的更新對所有線程是可見的,因為內(nèi)存屏障會將其他所有寫的值更新到緩存。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/74537.html
摘要:如何擁有可見性先介紹一下內(nèi)存模型中定義的種工作內(nèi)存與主內(nèi)存之間的原子操作鎖定作用于主內(nèi)存的變量,把一個變量標(biāo)識為一條線程獨(dú)占的狀態(tài)。并沒有達(dá)到期望的。 前言 要學(xué)習(xí)好Java的多線程,就一定得對volatile關(guān)鍵字的作用機(jī)制了熟于胸。最近博主看了大量關(guān)于volatile的相關(guān)博客,對其有了一點(diǎn)初步的理解和認(rèn)識,下面通過自己的話敘述整理一遍。 有什么用? volatile主要對所修飾的...
摘要:當(dāng)某個不應(yīng)該發(fā)布的對象被發(fā)布時,這種情況被稱為逸出。線程安全共享線程安全的對象在其內(nèi)部實現(xiàn)同步,因此多線程可以通過對象的公有接口來進(jìn)行訪問而不需要進(jìn)一步的同步。 前言 本系列博客是對《Java并發(fā)編程實戰(zhàn)》的一點(diǎn)總結(jié),本篇主要講解以下幾個內(nèi)容,內(nèi)容會比較枯燥。可能大家看標(biāo)題不能能直觀的感受出到底什么意思,這就是專業(yè)術(shù)語,哈哈,解釋下,術(shù)語(terminology)是在特定學(xué)科領(lǐng)域用...
摘要:但是不管怎樣,在一個線程已經(jīng)獲取鎖后,在釋放前再次獲取鎖是一個合理的需求,而且并不生硬。那么如果考慮重入,也很簡單,在加鎖時將的值累加即可,表示同一個線程重入此鎖的次數(shù),當(dāng)歸零,即表示釋放完畢。 前言 最近研究了一下juc包的源碼。在研究ReentrantReadWriteLock讀寫鎖的時候,對于其中一些細(xì)節(jié)的思考和處理以及關(guān)于提升效率的設(shè)計感到折服,難以遏制想要分享這份心得的念頭,...
摘要:但是不管怎樣,在一個線程已經(jīng)獲取鎖后,在釋放前再次獲取鎖是一個合理的需求,而且并不生硬。那么如果考慮重入,也很簡單,在加鎖時將的值累加即可,表示同一個線程重入此鎖的次數(shù),當(dāng)歸零,即表示釋放完畢。 前言 最近研究了一下juc包的源碼。在研究ReentrantReadWriteLock讀寫鎖的時候,對于其中一些細(xì)節(jié)的思考和處理以及關(guān)于提升效率的設(shè)計感到折服,難以遏制想要分享這份心得的念頭,...
摘要:總結(jié)我們主要介紹到了以下幾種方式實現(xiàn)單例模式餓漢方式線程安全懶漢式非線程安全和關(guān)鍵字線程安全版本懶漢式雙重檢查加鎖版本枚舉方式參考設(shè)計模式中文版第二版設(shè)計模式深入理解單例模式我是一個以架構(gòu)師為年之內(nèi)目標(biāo)的小小白。 初遇設(shè)計模式在上個寒假,當(dāng)時把每個設(shè)計模式過了一遍,對設(shè)計模式有了一個最初級的了解。這個學(xué)期借了幾本設(shè)計模式的書籍看,聽了老師的設(shè)計模式課,對設(shè)計模式算是有個更進(jìn)一步的認(rèn)識。...
閱讀 2437·2021-11-24 10:27
閱讀 3658·2019-08-30 15:55
閱讀 3428·2019-08-30 15:53
閱讀 2408·2019-08-29 17:27
閱讀 1502·2019-08-26 13:47
閱讀 3621·2019-08-26 10:28
閱讀 989·2019-08-23 15:59
閱讀 2933·2019-08-23 15:19