成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

認(rèn)識(shí)volatile

bawn / 3225人閱讀

摘要:如果你知道該成員變量會(huì)被多個(gè)線程訪問(wèn),如計(jì)數(shù)器價(jià)格等,你最好是將其設(shè)置為。但是對(duì)一個(gè)型的或變量的讀寫(xiě)是原子。一種實(shí)踐是用修飾和變量,使其能按原子類(lèi)型來(lái)讀寫(xiě)。修復(fù)符的另一個(gè)作用是提供內(nèi)存屏障,例如在分布式框架中的應(yīng)用。

volatile能使得一個(gè)非原子操作變成原子操作嗎?
一個(gè)典型的例子是在類(lèi)中有一個(gè) long 類(lèi)型的成員變量。如果你知道該成員變量會(huì)被多個(gè)線程訪問(wèn),如計(jì)數(shù)器、價(jià)格等,你最好是將其設(shè)置為 volatile。為什么?因?yàn)?Java 中讀取 long 類(lèi)型變量不是原子的,需要分成兩步,如果一個(gè)線程正在修改該 long 變量的值,另一個(gè)線程可能只能看到該值的一半(前 32 位)。但是對(duì)一個(gè) volatile 型的 long 或 double 變量的讀寫(xiě)是原子。

一種實(shí)踐是用 volatile 修飾 long 和 double 變量,使其能按原子類(lèi)型來(lái)讀寫(xiě)。double 和 long 都是64位寬,因此對(duì)這兩種類(lèi)型的讀是分為兩部分的,第一次讀取第一個(gè) 32 位,然后再讀剩下的 32 位,這個(gè)過(guò)程不是原子的,但 Java 中 volatile 型的 long 或 double 變量的讀寫(xiě)是原子的。volatile 修復(fù)符的另一個(gè)作用是提供內(nèi)存屏障(memory barrier),例如在分布式框架中的應(yīng)用。簡(jiǎn)單的說(shuō),就是當(dāng)你寫(xiě)一個(gè) volatile 變量之前,Java 內(nèi)存模型會(huì)插入一個(gè)寫(xiě)屏障(write barrier),讀一個(gè) volatile 變量之前,會(huì)插入一個(gè)讀屏障(read barrier)。意思就是說(shuō),在你寫(xiě)一個(gè) volatile 域時(shí),能保證任何線程都能看到你寫(xiě)的值,同時(shí),在寫(xiě)之前,也能保證任何數(shù)值的更新對(duì)所有線程是可見(jiàn)的,因?yàn)閮?nèi)存屏障會(huì)將其他所有寫(xiě)的值更新到緩存。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74537.html

相關(guān)文章

  • Java并發(fā)編程-volatile可見(jiàn)性的介紹

    摘要:如何擁有可見(jiàn)性先介紹一下內(nèi)存模型中定義的種工作內(nèi)存與主內(nèi)存之間的原子操作鎖定作用于主內(nèi)存的變量,把一個(gè)變量標(biāo)識(shí)為一條線程獨(dú)占的狀態(tài)。并沒(méi)有達(dá)到期望的。 前言 要學(xué)習(xí)好Java的多線程,就一定得對(duì)volatile關(guān)鍵字的作用機(jī)制了熟于胸。最近博主看了大量關(guān)于volatile的相關(guān)博客,對(duì)其有了一點(diǎn)初步的理解和認(rèn)識(shí),下面通過(guò)自己的話敘述整理一遍。 有什么用? volatile主要對(duì)所修飾的...

    YJNldm 評(píng)論0 收藏0
  • 「Java并發(fā)編程實(shí)戰(zhàn)」之對(duì)象的共享

    摘要:當(dāng)某個(gè)不應(yīng)該發(fā)布的對(duì)象被發(fā)布時(shí),這種情況被稱(chēng)為逸出。線程安全共享線程安全的對(duì)象在其內(nèi)部實(shí)現(xiàn)同步,因此多線程可以通過(guò)對(duì)象的公有接口來(lái)進(jìn)行訪問(wèn)而不需要進(jìn)一步的同步。 前言   本系列博客是對(duì)《Java并發(fā)編程實(shí)戰(zhàn)》的一點(diǎn)總結(jié),本篇主要講解以下幾個(gè)內(nèi)容,內(nèi)容會(huì)比較枯燥。可能大家看標(biāo)題不能能直觀的感受出到底什么意思,這就是專(zhuān)業(yè)術(shù)語(yǔ),哈哈,解釋下,術(shù)語(yǔ)(terminology)是在特定學(xué)科領(lǐng)域用...

    phodal 評(píng)論0 收藏0
  • 再次認(rèn)識(shí)ReentrantReadWriteLock讀寫(xiě)鎖

    摘要:但是不管怎樣,在一個(gè)線程已經(jīng)獲取鎖后,在釋放前再次獲取鎖是一個(gè)合理的需求,而且并不生硬。那么如果考慮重入,也很簡(jiǎn)單,在加鎖時(shí)將的值累加即可,表示同一個(gè)線程重入此鎖的次數(shù),當(dāng)歸零,即表示釋放完畢。 前言 最近研究了一下juc包的源碼。在研究ReentrantReadWriteLock讀寫(xiě)鎖的時(shí)候,對(duì)于其中一些細(xì)節(jié)的思考和處理以及關(guān)于提升效率的設(shè)計(jì)感到折服,難以遏制想要分享這份心得的念頭,...

    miya 評(píng)論0 收藏0
  • 再次認(rèn)識(shí)ReentrantReadWriteLock讀寫(xiě)鎖

    摘要:但是不管怎樣,在一個(gè)線程已經(jīng)獲取鎖后,在釋放前再次獲取鎖是一個(gè)合理的需求,而且并不生硬。那么如果考慮重入,也很簡(jiǎn)單,在加鎖時(shí)將的值累加即可,表示同一個(gè)線程重入此鎖的次數(shù),當(dāng)歸零,即表示釋放完畢。 前言 最近研究了一下juc包的源碼。在研究ReentrantReadWriteLock讀寫(xiě)鎖的時(shí)候,對(duì)于其中一些細(xì)節(jié)的思考和處理以及關(guān)于提升效率的設(shè)計(jì)感到折服,難以遏制想要分享這份心得的念頭,...

    missonce 評(píng)論0 收藏0
  • 深入理解單例模式

    摘要:總結(jié)我們主要介紹到了以下幾種方式實(shí)現(xiàn)單例模式餓漢方式線程安全懶漢式非線程安全和關(guān)鍵字線程安全版本懶漢式雙重檢查加鎖版本枚舉方式參考設(shè)計(jì)模式中文版第二版設(shè)計(jì)模式深入理解單例模式我是一個(gè)以架構(gòu)師為年之內(nèi)目標(biāo)的小小白。 初遇設(shè)計(jì)模式在上個(gè)寒假,當(dāng)時(shí)把每個(gè)設(shè)計(jì)模式過(guò)了一遍,對(duì)設(shè)計(jì)模式有了一個(gè)最初級(jí)的了解。這個(gè)學(xué)期借了幾本設(shè)計(jì)模式的書(shū)籍看,聽(tīng)了老師的設(shè)計(jì)模式課,對(duì)設(shè)計(jì)模式算是有個(gè)更進(jìn)一步的認(rèn)識(shí)。...

    FuisonDesign 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

bawn

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<