最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java并發(fā)編程之volatile關(guān)鍵字

 更新時(shí)間:2021年11月22日 16:06:30   作者:smileNicky  
這篇文章主要為大家介紹了Java并發(fā)編程之volatile關(guān)鍵字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1、volatile是什么?

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

2、并發(fā)編程的三大特性

并發(fā)編程有三個(gè)重要特性:原子行、可見性、有序性

原子性:原子性是指一個(gè)或者多個(gè)操作,要么全部執(zhí)行且執(zhí)行過程不會(huì)被其它操作打斷,要么全部不執(zhí)行。

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

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

3、什么是指令重排序?

假如我們寫一個(gè)程序,我們會(huì)期待這些語句的實(shí)際執(zhí)行順便和代碼的順序是一致的,大部分情況是一致的,但實(shí)際上,編譯器、JVM 或者 CPU 都有可能出于優(yōu)化等目的,對執(zhí)行的順序進(jìn)行調(diào)整,這個(gè)就是指令重排序

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

代碼順序如圖:

在這里插入圖片描述

指令重排后,a=100; a= a+100會(huì)提到一起執(zhí)行,效率提高

在這里插入圖片描述

上面的例子,是可以提高執(zhí)行效率,但是有時(shí)候指令重排是會(huì)導(dǎo)致問題的,如下代碼例子,代碼順序是先初始化content,然后設(shè)置標(biāo)識(shí)為true,線程B檢測到為true之后,調(diào)用content的方法

在這里插入圖片描述

如果指令重排后,這種情況就會(huì)出現(xiàn)沒初始化完成,就直接調(diào)用conten的方法

在這里插入圖片描述

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

4、volatile有什么作用?

從前面的學(xué)習(xí)也可以指定,volatile關(guān)鍵字是可以保證并發(fā)編程的有序性和可見性的

保證可見性

volatile保證可見性:

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

可見性涉及到Java內(nèi)存模型,詳細(xì)可以參考我上篇博客:鏈接

java內(nèi)存模型(JMM)結(jié)構(gòu)圖,每個(gè)Java線程都有自己的工作內(nèi)存,volatile修飾的變量,修改后,會(huì)自動(dòng)同步到主內(nèi)存;每個(gè)線程讀取時(shí)都會(huì)從主內(nèi)存先讀取到工作內(nèi)存的副本

在這里插入圖片描述

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

保證有序性

對于并發(fā)編程的有序性問題,前面已經(jīng)做了比較詳細(xì)的描述,主要是cpu、jvm、內(nèi)存都會(huì)對代碼執(zhí)行順序進(jìn)行指令重排序,加上volatile可以保證有序性,避免指令重排,依賴于操作系統(tǒng)的內(nèi)存屏障?

5、volatile可以保證原子性?

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

6、volatile 和 synchronized對比

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

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • java 中HashMap實(shí)現(xiàn)原理深入理解

    java 中HashMap實(shí)現(xiàn)原理深入理解

    這篇文章主要介紹了java 中HashMap實(shí)現(xiàn)原理深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 手把手帶你分析SpringBoot自動(dòng)裝配完成了Ribbon哪些核心操作

    手把手帶你分析SpringBoot自動(dòng)裝配完成了Ribbon哪些核心操作

    這篇文章主要介紹了詳解Spring Boot自動(dòng)裝配Ribbon哪些核心操作的哪些操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Java Web程序?qū)崿F(xiàn)返回JSON字符串的方法總結(jié)

    Java Web程序?qū)崿F(xiàn)返回JSON字符串的方法總結(jié)

    Java Web服務(wù)器端只要把Java對象數(shù)據(jù)轉(zhuǎn)成JSON字符串,把JSON字符串以文本的形式通過response輸出即可,
    2016-05-05
  • Java使用poi包讀取Excel文檔代碼分享

    Java使用poi包讀取Excel文檔代碼分享

    這篇文章主要介紹了Java使用poi包讀取Excel文檔代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • spring aop之@AfterReturning不生效問題及解決

    spring aop之@AfterReturning不生效問題及解決

    這篇文章主要介紹了spring aop之@AfterReturning不生效問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java 多線程的同步代碼塊詳解

    Java 多線程的同步代碼塊詳解

    這篇文章主要介紹了Java 多線程的同步代碼塊,使用synchronized關(guān)鍵字創(chuàng)建線程同步方法是實(shí)現(xiàn)線程同步的關(guān)鍵,需要的朋友可以參考下
    2021-10-10
  • Java集合ArrayList與LinkedList詳解

    Java集合ArrayList與LinkedList詳解

    這篇文章主要介紹了Java集合ArrayList與LinkedList詳解,對于ArrayList和LinkedList,他們都是List接口的一個(gè)實(shí)現(xiàn)類,并且我們知道他們的實(shí)現(xiàn)方式各不相同,例如ArrayList底層實(shí)現(xiàn)是一個(gè)數(shù)組
    2022-08-08
  • Java中實(shí)現(xiàn)多重排序的幾種方法小結(jié)

    Java中實(shí)現(xiàn)多重排序的幾種方法小結(jié)

    Java中的多重排序通常指的是同時(shí)對一個(gè)集合中的兩個(gè)或更多列或多維度的數(shù)據(jù)進(jìn)行排序,這通常通過自定義Comparator實(shí)現(xiàn),可以結(jié)合Arrays.sort()或Collections.sort()方法,當(dāng)需要進(jìn)行多重排序時(shí),即根據(jù)多個(gè)字段進(jìn)行排序,我們可以采用以下幾種方法
    2024-10-10
  • No ‘Access-Control-Allow-Origin‘ header is present跨域及解決

    No ‘Access-Control-Allow-Origin‘ header is&nb

    這篇文章主要介紹了No ‘Access-Control-Allow-Origin‘ header is present跨域及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 解決lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的問題

    解決lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的問題

    這篇文章主要介紹了lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

吉安市| 安远县| 卢湾区| 昌平区| 个旧市| 永定县| 元氏县| 明星| 汉沽区| 荔波县| 鲁山县| 小金县| 平南县| 濉溪县| 延长县| 昂仁县| 云安县| 清镇市| 南宁市| 南宁市| 高密市| 郓城县| 甘南县| 灵丘县| 拜城县| 大安市| 定州市| 惠来县| 新干县| 同仁县| 府谷县| 长阳| 扶沟县| 晋江市| 岳西县| 同仁县| 甘南县| 手机| 昆明市| 台湾省| 澄江县|