成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 開發(fā)實戰(zhàn)—一起來認識volatile機制

開發(fā) 前端
不論是求職面試還是項目實際開發(fā),volatile都是一個需要掌握的知識點,今天,我們就一起來認識volatile機制,從實戰(zhàn)中精進我們的能力吧。

現如今,我們處于一個新興技術高速發(fā)展的時代,各個產業(yè)對于開發(fā)人員的需求更多、更高。因此,無論是在入門階段還是進階階段都需要學習大量的專業(yè)知識,不斷提高對Java的認識是必要的。

不論是求職面試還是項目實際開發(fā),volatile都是一個需要掌握的知識點,今天,我們就一起來認識volatile機制,從實戰(zhàn)中精進我們的能力吧。

[[404609]]

何為Volatile?為什么要用Volatile?

java是面向對象的高級編程語言,Java 語言包含兩種內在的同步機制:同步塊(或方法)和 volatile 變量,volatile是Java提供的一種輕量級的同步機制。

在Java多線程的開發(fā)中有三種特性:原子性、可見性、有序性,使用volatile不會引起線程上下文的切換和調度,可以保證內存可見性和防止指令重排序。

基本用法

在Java語言里,volatile關鍵字是用來修飾變量的,方式如下入所示。表示:該變量需要直接存儲到主內存中。

  1. public class SharedClass { 
  2. public volatile int counter = 0

被volatile關鍵字修飾的 int counter 變量會直接存儲到主內存中。并且所有關于該變量的讀操作,都會直接從主內存中讀取,而不是直接從CPU緩存。

理解 volatile 關鍵字

對于初學者來說,volatile只是簡單的了解,只知道volatile作用就是“保證可見性”、“禁止指令重排序”,但是仍然存在一些誤區(qū)。

變量可見性問題(Variable Visibility Problem) : volatile可以保證變量變化在多線程間的可見性。

一個多線程應用中,出于計算性能的考慮,每個線程默認是從主內存將該變量拷貝到線程所在CPU的緩存中,然后進行讀寫操作的。現在電腦基本都是多核CPU,不同的線程可能運行的不同的核上,而每個核都會有自己的緩存空間。

volatile的出現,就是為了解決線程間不可見性,通過 volatile 修飾的變量,都會變得線程間可見。

解決多線程不可見的方式就是:

  • 通過 volatile 修飾的變量,所有關于該變量的讀操作,都會直接從主內存中讀取,而不是 CPU 自己的緩存。而所有該變量的寫操都會寫到主內存上。
  • 因為主內存是所有 CPU 共享的,理所當然即使是不同 CPU 上的線程也能看到其他線程對該變量的修改了。volatile不僅僅只保證 volatile變量的可見性,volatile 在可見性上所做的工作,實際上比保證 volatile 變量的可見性更多。

特性及原理

(1) 可見性

任意一個線程修改了 volatile 修飾的變量,其他線程可以馬上識別到最新值。實現可見性的原理如下。

  • 步驟 1:修改本地內存,強制刷回主內存。
  • 步驟 2:強制讓其他線程的工作內存失效過期。(此部分更多的屬于MESI協(xié)議)

(2) 互斥性

同一時刻只允許一個線程操作 volatile 變量,volatile 修飾的變量在不加鎖的場景下也能實現有鎖的效果,類似于互斥鎖。上面的 VolatileFeaturesA.java 和下面的 VolatileFeaturesB.java 兩個類實現的功能是一樣的(除了 getAndAdd 方法)。

(3) 部分有序性

JVM 是使用內存屏障來禁止指令重排,從而達到部分有序性效果,了解到內存屏障類型,我們就可以解決那些因重排序引起的有序性問題。

什么是內存屏障呢?內存屏障其實就是一個CPU指令,在硬件層面上來說可以扥為兩種:Load Barrier 和 Store Barrier即讀屏障和寫屏障。主要有兩個作用:

  • 阻止屏障兩側的指令重排序;
  • 強制把寫緩沖區(qū)/高速緩存中的臟數據等寫回主內存,讓緩存中相應的數據失效。

在JVM層面上來說作用與上面的一樣,但是種類可以分為四種:

實現有序性的原理:

如果屬性使用了 volatile 修飾,在編譯的時候會在該屬性的前或后插入內存屏障來禁止指令重排。

首先一個變量被volatile關鍵字修飾之后有兩個作用:

  • 對于寫操作:對變量更改完之后,要立刻寫回到主存中。
  • 對于讀操作:對變量讀取的時候,要從主存中讀,而不是緩存。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2012-06-25 09:37:24

Web

2012-04-14 20:47:45

Android

2012-09-10 13:42:55

PHP項目管理

2012-11-08 17:33:53

智慧云

2020-06-11 18:35:23

C++編程語言

2009-07-14 16:35:57

Swing組件大全

2021-09-09 08:47:52

Dependency 安全漏洞工具

2010-05-21 17:32:07

IIS服務器

2009-10-29 16:32:34

Oracle表空間

2021-06-02 15:30:12

Synchronize并發(fā)多線程

2021-04-26 11:18:15

FedoraLinuxBug

2011-09-07 22:59:07

聯(lián)想一體機

2022-05-20 12:14:50

ZuulSpringClou

2010-05-10 15:31:35

Unix文件

2025-03-27 02:00:00

SPIJava接口

2023-06-28 07:49:02

2012-07-10 09:14:51

Web

2017-11-02 15:28:52

2017-11-02 14:39:54

2021-07-28 14:15:51

漏洞懸賞平臺漏洞谷歌
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人日韩av | 亚洲欧美综合网 | 久久综合久久综合久久综合 | 亚洲精品久久嫩草网站秘色 | 成人在线影视 | 免费观看成人av | 99精品视频一区二区三区 | 国产一区二区精 | 亚洲视频精品 | 欧美日在线 | 欧美国产日韩在线观看成人 | 国产成人在线免费 | 国产精品久久久久久久岛一牛影视 | 天天爽夜夜爽精品视频婷婷 | 天天射中文| 欧美日韩精品免费 | 亚洲免费视频一区二区 | 91最新在线视频 | 99在线免费观看视频 | 国产色婷婷精品综合在线手机播放 | 嫩草视频入口 | 久艹网站 | 中文字幕一区二区三区在线观看 | 欧美日韩电影免费观看 | 久久久久久久网 | www成人免费视频 | 亚洲精品一区二区网址 | 日日骚视频 | jvid精品资源在线观看 | 日韩一区二区福利视频 | 欧美日韩在线一区二区 | 久草福利 | 91精品一区二区三区久久久久久 | 国产成人免费视频网站视频社区 | 精品国产一区二区在线 | 亚洲精品免费看 | 亚洲精品电影网在线观看 | 国产精品久久久久久吹潮 | 午夜精品视频在线观看 | 久久久亚洲一区 | 亚洲欧洲日本国产 |