亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java volatile案例講解

瀏覽:3日期:2022-08-10 16:08:04

本篇來自java并發編程實戰關于volatile的總結。

要說volatile,先得明白內存可見性。那我們就從內存可見性說起。

一、內存可見性

可見性是一種復雜的屬性,因為可見性中的錯誤總是會違背我們的直覺。在單線程環境中,如果向某個變量先寫入值,然后在沒有其他寫入操作的情況下讀取這個變量,那么總能得到相同的值。這看起來很自然。然而,當讀操作和寫操作在不同的線程中執行時,情況卻并非如此,這聽起來或許有些難以接受。通常,我們無法確保執行讀操作的線程能適時地看到其他線程寫入的值,有時甚至是根本不可能的事情。為了確保多個想成之間對內存寫入操作的可見性,必須使用同步機制。 對于以下代碼:

public class NoVisibility { private static boolean ready; private static int number;private static class ReaderThread extends Thread{public void run(){ while(!ready)Thread.yield(); System.out.println(number);} }public static void main(String[] args){new ReaderThread().start();number = 42;ready = true; }}

NoVisibility可能會持續循環下去,因為讀線程可能永遠都看不到ready的值。一種更奇怪的現象是,Novisibility可能會輸出0,因為讀線程可能看到了寫入ready的值,但卻沒有看到之后寫入number的值,這種現象被稱為“重排序(Reordering)“。只要在某個線程中無法檢測到重排序情況,(即使在其他線程中可以很明顯地看到該線程中的重排序),那么就無法確保線程中的操作將按照程序中指定的順序來執行。當主線程首先寫入number,然后在沒有同步的情況下寫入ready,那么讀線程看到的順序可能與寫入的順序完全相反。

在沒有同步的情況下,編譯器、處理器以及運行時等都可能對操作的執行順序進行一些意想不到的調整。在缺乏足夠同步的多線程程序中,要相對內存操作的執行順序進行判斷,幾乎無法得出正確的結論。

這看上去似乎是一種失敗的設計,但卻能使JVM充分地利用現代多核處理器的強大性能。例如,在缺少同步的情況下,java內存模型允許編譯器對操作順序進行重排序,并將數值緩存在寄存器中。此外,它還允許CPU對操作順序進行重排序,并將數值環迅在處理器特定的緩存中。

二、Volatile變量

java語言提供了一種稍弱的同步機制,即volatile變量,用來確保將變量的更新操作通知到其他線程。當把變量聲明為volatile類型后,編譯器與運行時都會注意到這個變量是共享的,因此不會將該變量上的操作和其他內存操作一起重排序。volatile變量不會被緩存在寄存器或者對其他處理器不可見的地方,因此在讀取volatile類型的變量時總會返回最新寫入的值。

volatile與加鎖機制的區別:

加鎖機制既可以確保可見性又可以確保原子性,而volatile變量只能確保可見性。

 當且僅當滿足以下所有條件時,才應該使用volatile變量:

對變量的寫入操作不依賴變量的當前值,或者你能確保只有單個線程更新變量的值。 該變量不會與其他狀態變量一起納入不變性條件中。 在訪問變量時不需要加鎖。

到此這篇關于java volatile案例講解的文章就介紹到這了,更多相關Java volatile內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 国产精品视频网址 | 国产ppp在线视频在线观看 | 色综合综合色 | 成年人免费观看网站 | 日本一级毛片视频网站 | 欧美一级毛片一级 | 女教师的一级毛片 | 日韩欧美在线综合网高清 | 操出水视频| 一级毛片日韩 | 人超级碰碰视频在线观看 | 91在线精品免费观看 | 国产乱淫视频 | 午夜看一级特黄a大片黑 | 久久97精品久久久久久久看片 | 毛茸茸年轻成熟亚洲人 | 精品国产午夜久久久久九九 | 人人婷婷色综合五月第四人色阁 | 亚洲国产精品成人精品软件 | 国产日韩欧美综合 | 韩国特黄毛片一级毛片免费 | 一级韩国aa毛片免费观看 | 性欧美视频a毛片在线播放 性欧美视频在线观看 | 1769国内精品免费视频视频 | 国产成人a大片大片在线播放 | 91摄影师与白嫩模特观看 | 天天色踪合 | 国产黄页在线观看 | 国产妞干网 | 日韩在线一区二区 | 国产高清美女一级a毛片久久w | 免费成人在线观看 | 色拍拍在线精品视频 | 国产精品一区二区 尿失禁 国产精品一区二区三 | 日韩中文字幕免费观看 | 色婷综合 | 亚洲欧洲日韩在线 | 久久亚洲美女久久久久 | 男女强吻摸下面揉免费 | 91影视在线看免费观看 | 成人国产亚洲欧美成人综合网 |