国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java多線程——volatile關鍵字

W_BinaryTree / 1170人閱讀

摘要:多線程主要就是圍繞可見性和原子性這兩個特性展開的,關鍵字對應著可見性,但很多時候人們誤以為使用了關鍵字后編寫多線程就沒問題了,不知道它不能保證原子性。

說起volatile和sychronized這兩個關鍵字,學習過多線程的同學應該都很熟悉,在jdk1.5之前,主要就是靠這兩個關鍵字來做多線程編程的,但在jdk1.5以后,多了一個java.util.concurrent(JUC)包,里面包含了很多工具類用于多線程編程。但今天的重點還是講講volatile關鍵字。

多線程主要就是圍繞可見性和原子性這兩個特性展開的,volatile關鍵字對應著可見性,但很多時候人們誤以為使用了volatile關鍵字后編寫多線程就沒問題了,不知道它不能保證原子性。

首先來說說什么是可見性?

要說到可見性,就得扯到java內存模型了,暫且不做太多展開,簡單理解下就是,現在技術的提升,使得cpu的核心數不斷增多,而每個核心又擁有自己的緩存,當處理數據時會有以下幾個步驟:

將數據從內存讀取到緩存中

在緩存中對數據進行操作

將緩存中的數據寫入內存中

步驟2中的操作并不是原子性,也就是在步驟1之后,如果主內存變量發生修改之后,線程工作內存中的值由于已經加載,不會產生對應的變化,所以計算出來的結果會和預期不一樣

對于volatile修飾的變量,jvm虛擬機只是保證從主內存加載到線程工作內存的值是最新的

正是因為這幾個步驟的存在,往往別的核心從內存中讀取到的數據不是最新的,這就造成了數據錯誤。java為了屏蔽操作系統以及硬件之間的不同,在jvm中虛擬出了一套內存模型,編碼時使用volatile關鍵字對需要實時可見的數據修飾,在jvm底層會對該變量做特定的處理。

總結下可見性就是當多個線程操作共享數據時,保證操作的數據是最新的。

volatile關鍵字的作用?

剛也說過volatile關鍵字對應的可見性,但這是其中之一,它有兩個作用:

1)使用volatile關鍵字修飾的變量,保證了其在多線程之間的可見性,即每次讀取到volatile變量,一定是最新的數據

2)代碼底層執行不像我們看到的高級語言—-Java程序這么簡單,它的執行是Java代碼–>字節碼–>根據字節碼執行對應的C/C++代碼–>C/C++代碼被編譯成匯編語言–>和硬件電路交互,現實中,為了獲取更好的性能JVM可能會對指令進行重排序,多線程下可能會出現一些意想不到的問題。使用volatile則會對禁止語義重排序,當然這也一定程度上降低了代碼執行效率

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67732.html

相關文章

  • Java線程學習(三)volatile鍵字

    摘要:三關鍵字能保證原子性嗎并發編程藝術這本書上說保證但是在自增操作非原子操作上不保證,多線程編程核心藝術這本書說不保證。多線程訪問關鍵字不會發生阻塞,而關鍵字可能會發生阻塞關鍵字能保證數據的可見性,但不能保證數據的原子性。 系列文章傳送門: Java多線程學習(一)Java多線程入門 Java多線程學習(二)synchronized關鍵字(1) java多線程學習(二)synchroniz...

    tain335 評論0 收藏0
  • JAVA線程機制解析-volatile&synchronized

    摘要:當一個線程持有重量級鎖時,另外一個線程就會被直接踢到同步隊列中等待。 java代碼先編譯成字節碼,字節碼最后編譯成cpu指令,因此Java的多線程實現最終依賴于jvm和cpu的實現 synchronized和volatile 我們先來討論一下volatile關鍵字的作用以及實現機制,每個線程看到的用volatile修飾的變量的值都是最新的,更深入的解釋就涉及到Java的內存模型了,我們...

    dendoink 評論0 收藏0
  • Java 線程(6):volatile 鍵字的使用

    摘要:所以多線程條件下使用關鍵字的前提是對變量的寫操作不依賴于變量的當前值,而賦值操作很明顯滿足這一前提。在多線程環境下,正確使用關鍵字可以比直接使用更加高效而且代碼簡潔,但是使用關鍵字也更容易出錯。 volatile 作為 Java 語言的一個關鍵字,被看作是輕量級的 synchronized(鎖)。雖然 volatile 只具有synchronized 的部分功能,但是一般使用 vola...

    paulquei 評論0 收藏0
  • 線程學習筆記(1):volatile和synchronized

    摘要:今天開始整理學習多線程的知識,談談最重要的兩個關鍵字和。但是這樣一個過程比較慢,在使用多線程的時候就會出現問題。有序性有序性是指多線程執行結果的正確性。這種機制在多線程中會出現問題,因此可以通過來禁止重排。 今天開始整理學習多線程的知識,談談最重要的兩個關鍵字:volatile和synchronized。 一、三個特性 1、原子性 所謂原子性操作就是指這些操作是不可中斷的,要么執行過程...

    jk_v1 評論0 收藏0
  • 慕課網_《細說Java線程之內存可見性》學習總結

    時間:2017年07月09日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程簡介 1-1 課程簡介 課程目標和學習內容 共享變量在線程間的可見性 synchronized實現可見性 volatile實現可見性 指令重排序 as-if-seria...

    wupengyu 評論0 收藏0

發表評論

0條評論

W_BinaryTree

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<