91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java并發編程中volatile關鍵字有什么作用

發布時間:2021-11-23 10:02:09 來源:億速云 閱讀:170 作者:iii 欄目:開發技術

本篇內容主要講解“Java并發編程中volatile關鍵字有什么作用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java并發編程中volatile關鍵字有什么作用”吧!

1、volatile是什么?

首先簡單說一下,volatile是什么?volatile是Java中的一個關鍵字,也是一種同步機制。volatile為了保證變量的可見性,通過volatile修飾的變量具有共享性。修改了volatile修飾的變量,其它線程是可以讀取到最新的值的

2、并發編程的三大特性

并發編程有三個重要特性:原子行可見性有序性

原子性:原子性是指一個或者多個操作,要么全部執行且執行過程不會被其它操作打斷,要么全部不執行。

可見性:可見性是指共享變量對于多個線程都是可見的,也即一個線程修改了變量,其它線程馬上就能知道

有序性:有序性是指程序的執行順序按照代碼的先后順便執行

3、什么是指令重排序?

假如我們寫一個程序,我們會期待這些語句的實際執行順便和代碼的順序是一致的,大部分情況是一致的,但實際上,編譯器、JVM 或者 CPU 都有可能出于優化等目的,對執行的順序進行調整,這個就是指令重排序

重排序的好處:提高處理速度

代碼順序如圖:

Java并發編程中volatile關鍵字有什么作用

指令重排后,a=100; a= a+100會提到一起執行,效率提高

Java并發編程中volatile關鍵字有什么作用

上面的例子,是可以提高執行效率,但是有時候指令重排是會導致問題的,如下代碼例子,代碼順序是先初始化content,然后設置標識為true,線程B檢測到為true之后,調用content的方法

Java并發編程中volatile關鍵字有什么作用

如果指令重排后,這種情況就會出現沒初始化完成,就直接調用conten的方法

Java并發編程中volatile關鍵字有什么作用

所以,指令重排有好處也有壞處,一般可能是cpu、編譯器或者是內存會進行指令重排,為了避免指令重排,保證并發編程的有序性,有時候需要使用synchronized或者volatile等等方式避免。volatile可以避免指令重排,保證并發編程的有序性,依賴于操作系統的內存屏障

4、volatile有什么作用?

從前面的學習也可以指定,volatile關鍵字是可以保證并發編程的有序性和可見性的

保證可見性

volatile保證可見性:

使用volatile變量時,必須重新從主內存加載到工作內存修改volatile變量后,必須馬上同步回主內存

可見性涉及到Java內存模型,詳細可以參考我上篇博客:鏈接

java內存模型(JMM)結構圖,每個Java線程都有自己的工作內存,volatile修飾的變量,修改后,會自動同步到主內存;每個線程讀取時都會從主內存先讀取到工作內存的副本

Java并發編程中volatile關鍵字有什么作用

注意:volatile只能保證變量的可見性,對于一個Java對象是不能保證的,要去對象具體的屬性設置volatile

保證有序性

對于并發編程的有序性問題,前面已經做了比較詳細的描述,主要是cpu、jvm、內存都會對代碼執行順序進行指令重排序,加上volatile可以保證有序性,避免指令重排,依賴于操作系統的內存屏障 

5、volatile可以保證原子性?

volatitle只能保證單個變量的原子性,不能保證一系列操作的原子操作的,所以volatile是線程不安全的,不具有原子性

6、volatile 和 synchronized對比

volatile不可以保證線程安全,synchronized可以保證線程安全volatile是輕量的,而且是沒有鎖機制的,性能比synchronized好volatile不具有原子性,synchronized可以保證原子性

到此,相信大家對“Java并發編程中volatile關鍵字有什么作用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴海县| 五河县| 鄱阳县| 渝中区| 长兴县| 迁西县| 文化| 祁阳县| 霍山县| 岫岩| 岳西县| 延长县| 清苑县| 若尔盖县| 平定县| 铜鼓县| 玛多县| 洛浦县| 安徽省| 永丰县| 桃源县| 合阳县| 习水县| 平武县| 永宁县| 宝兴县| 贵阳市| 新安县| 五河县| 板桥市| 江津市| 静乐县| 沾益县| 怀来县| 洛隆县| 泉州市| 顺平县| 新乡市| 建水县| 正阳县| 泽普县|