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

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修飾的屬性保證每次讀取都能讀到最新的值

但不會 & 無法更新已經讀了的值

原理

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

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

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

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

3.2 保證有序性

具體描述

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

原理

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

3.3 不保證原子性

具體描述

volatile修飾的屬性若在修改前已讀取了值,那么修改后,無法改變已經復制到工作內存的值

即無法阻止并發(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的工作內存中還是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內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中斷線程的方法

    Java中斷線程的方法

    這篇文章主要介紹了Java中斷線程的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • SpringBoot2.0整合SpringCloud Finchley @hystrixcommand注解找不到解決方案

    SpringBoot2.0整合SpringCloud Finchley @hystrixcommand注解找不到解決方案

    這篇文章主要介紹了SpringBoot2.0整合SpringCloud Finchley @hystrixcommand注解找不到解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • idea為java程序添加啟動參數的問題解析(program?arguments,vm?arguments,Environment?variable)并在程序中獲取使用

    idea為java程序添加啟動參數的問題解析(program?arguments,vm?arguments,Envi

    這篇文章主要介紹了idea為java程序添加啟動參數的問題解析(program?arguments,vm?arguments,Environment?variable)并在程序中獲取使用,本文給大家分享問題描述及解決方法,需要的朋友可以參考下
    2023-09-09
  • Java文件處理之使用itextpdf實現(xiàn)excel轉pdf

    Java文件處理之使用itextpdf實現(xiàn)excel轉pdf

    在文件處理中,經常有文件類型轉換的使用場景,本文主要介紹了如何使用poi以及itextpdf完成excel轉pdf的操作,需要的小伙伴可以參考一下
    2024-02-02
  • SpringBoot攔截器excludePathPatterns方法不生效的解決方案

    SpringBoot攔截器excludePathPatterns方法不生效的解決方案

    這篇文章主要介紹了SpringBoot攔截器excludePathPatterns方法不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Springboot創(chuàng)建項目的圖文教程(idea版本)

    Springboot創(chuàng)建項目的圖文教程(idea版本)

    這篇文章主要介紹了Springboot創(chuàng)建項目的圖文教程(idea版本),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 基于Mybatis實現(xiàn)動態(tài)數據源切換的示例代碼

    基于Mybatis實現(xiàn)動態(tài)數據源切換的示例代碼

    在當今的互聯(lián)網應用中,微服務大行其道,隨著業(yè)務的發(fā)展和擴展,單一的數據庫無法滿足日益增長的數據需求,本文將基于 JDK17 + Spring Boot 3 和 MyBatis 框架實現(xiàn)動態(tài)切換數據源功能,需要的朋友可以參考下
    2024-09-09
  • Java精品項目瑞吉外賣之后端登錄功能篇

    Java精品項目瑞吉外賣之后端登錄功能篇

    這篇文章主要為大家詳細介紹了java精品項目-瑞吉外賣訂餐系統(tǒng),此項目過大,分為多章獨立講解,本篇內容為后端登錄功能的實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java數據類型轉換實例解析

    Java數據類型轉換實例解析

    這篇文章主要介紹了Java數據類型轉換實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Spring AI 入門學習指南

    Spring AI 入門學習指南

    本文介紹了如何使用SpringAI和Ollama進行AI開發(fā),包括如何配置和使用聊天、圖像、語音轉文字和文字轉語音模型,以及如何在Java項目中集成Ollama模型,感興趣的朋友一起看看吧
    2024-11-11

最新評論

福建省| 鹰潭市| 余江县| 凭祥市| 正宁县| 营山县| 德钦县| 水富县| 普格县| 伽师县| 昭觉县| 民县| 红安县| 九龙坡区| 嘉荫县| 昔阳县| 梅河口市| 宜章县| 丹阳市| 榆树市| 会宁县| 荣成市| 瓦房店市| 公主岭市| 开鲁县| 镇远县| 滦南县| 广东省| 鹿泉市| 闸北区| 峨眉山市| 元江| 修武县| 上思县| 鹤岗市| 嘉祥县| 随州市| 沐川县| 得荣县| 射洪县| 永平县|