欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java那些鮮為人知的關鍵字volatile詳析

 更新時間:2021年03月05日 10:16:48   作者:Carson_Ho  
這篇文章主要給大家介紹了關于Java那些鮮為人知的關鍵字volatile的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

在Java中,Java中volatile關鍵字十分重要

本文全面 & 詳細解析volatile關鍵字,希望你們會喜歡

目錄

1. 定義

Java 中的1個關鍵字 / 修飾符

2. 作用

保證 被 volatile修飾的共享變量 的可見性 & 有序性,但不保證原子性

3. 具體描述

下面,我將詳細講解 volatile是如何保證 “共享變量 的可見性 & 有序性,但不保證原子性”的具體原理

儲備知識:原子性、可見性 & 有序性

3.1 保證可見性

具體描述

volatile修飾的屬性保證每次讀取都能讀到最新的值

但不會 & 無法更新已經(jīng)讀了的值

原理

線程A在工作內(nèi)存中修改的共享屬性值會立即刷新到主存,線程B/C/D每次通過讀寫柵欄來達到類似于直接從主存中讀取屬性值

只是類似,網(wǎng)上有些說volatile修飾的變量讀寫直接在主存中操作,這種說法是不對的,只是表現(xiàn)出類似的行為

讀寫柵欄是一條CPU指令;插入一個讀寫柵欄 = 告訴CPU & 編譯器先于這個命令的必須先執(zhí)行,后于這個命令的必須后執(zhí)行(有序性)

讀寫柵欄另一個作用是強制更新一次不同CPU的緩存。例如,一個寫柵欄會 把這個柵欄前寫入的數(shù)據(jù)刷新到緩存,以此保證可見性

3.2 保證有序性

具體描述

當對volatile修飾的屬性進行讀/寫操作時,其前面的代碼必須已執(zhí)行完成 & 結果對后續(xù)的操作可見

原理

重排序時,以volatile修飾屬性的讀/寫操作代碼行為分界線,讀/寫操作前面的代碼不許排序到后面,后面同理不許排序到前面。由此保證有序性

3.3 不保證原子性

具體描述

volatile修飾的屬性若在修改前已讀取了值,那么修改后,無法改變已經(jīng)復制到工作內(nèi)存的值

即無法阻止并發(fā)的情況

原理

// 變量a 被volatile修飾 
volatile static int a=0;
a++;
// 包含了2步操作:1 = 讀取a、2= 執(zhí)行a+1 & 將a+1結果賦值給a
// 設:線程A、B同時執(zhí)行以下語句,線程A執(zhí)行完第1步后被掛起、線程B執(zhí)行了a++,那么主存中a的值為1
// 但線程A的工作內(nèi)存中還是0,由于線程A之前已讀取了a的值 = 0,執(zhí)行a++后再次將a的值刷新到主存 = 1
// 即 a++執(zhí)行了2次,但2次都是從0變?yōu)?,故a的值最終為1

4. 應用場

由于volatile保證可見性和有序性,被volatile修飾的共享屬性一般并發(fā)讀/寫沒有問題,可看做是一種輕量級的synchronized實現(xiàn)

關于synchronized的講解具體請看文章:Java:這是一份全面 & 詳細的 Synchronized關鍵字 學習指南

至此,關于Java中的volatile關鍵字講解完畢。

5. 總結

本文主要講解了Java中volatile關鍵字,其作用為 保證 “共享變量 的可見性 & 有序性,具體總結如下:

到此這篇關于Java那些鮮為人知的關鍵字volatile的文章就介紹到這了,更多相關Java關鍵字volatile內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Feign實現(xiàn)微服務間文件傳輸

    使用Feign實現(xiàn)微服務間文件傳輸

    這篇文章主要為大家詳細介紹了使用Feign實現(xiàn)微服務間文件傳輸,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java課設案例之百行代碼實現(xiàn)簡易計算器

    Java課設案例之百行代碼實現(xiàn)簡易計算器

    下面這篇文章主要給大家介紹了關于Java課設案例之百行代碼實現(xiàn)簡易計算器的相關資料,這是一個關于java簡單計算器的完整課程設計以及源碼,需要的朋友可以參考下
    2023-06-06
  • java類和對象原理與用法分析

    java類和對象原理與用法分析

    這篇文章主要介紹了java類和對象原理與用法,結合實例形式分析了java類和對象的相關概念、功能、原理、使用技巧與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • java實現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結構

    java實現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結構

    這篇文章主要為大家詳細介紹了java實現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結構,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 一文解讀Spring Bean的生命周期

    一文解讀Spring Bean的生命周期

    這篇文章主要給大家詳細解讀Spring Bean的生命周期,文中有詳細的代碼示例,對我們學習Spring Bean的生命周期有一定的幫助,感興趣的同學跟著小編一起來學習吧
    2023-07-07
  • Java如何獲取相對路徑文件

    Java如何獲取相對路徑文件

    這篇文章主要介紹了Java如何獲取相對路徑文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 關于java中自定義注解的使用

    關于java中自定義注解的使用

    這篇文章主要介紹了關于java中自定義注解的使用,注解像一種修飾符一樣,應用于包、類型、構造方法、方法、成員變量、參數(shù)及本地變量的聲明語句中,需要的朋友可以參考下
    2023-07-07
  • 學習Java之IO流的基礎概念詳解

    學習Java之IO流的基礎概念詳解

    這篇文章主要給大家介紹了Java中的IO流,我們首先要搞清楚一件事,就是為什么需要IO流這個東西,但在正式學習IO流的使用之前,小編有必要帶大家先了解一下IO流的基本概念,需要的朋友可以參考下
    2023-09-09
  • Spring Security整合CAS的示例代碼

    Spring Security整合CAS的示例代碼

    本篇文章主要介紹了Spring Security整合CAS的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java設計模式的事件模型詳解

    Java設計模式的事件模型詳解

    這篇文章主要為大家詳細介紹了Java設計模式的事件模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論