Java是怎麼保證原子性,可見性

2021-06-26 07:22:33 字數 362 閱讀 8931

先來談談可見性:

(1)volatile 變數:實際的作用:告訴jvm,這個變數的值不能取cpu的cache中的,應為那個值可能已經過時了,從這個層面來講,volatile已經實現了可見性,但是他並沒有實現原子性,原子性說白了就是一堆**要一起執行完,比如說x++,這個在jvm層面上是要幾條語句。。。。

(2)鎖:jvm自己實現了一套記憶體一致性協議,對於變數的讀寫是由順序控制的,read,load,store的變數是一定會寫入主存的,已經由jvm的記憶體一致性協議完成了資料的讀取寫入問題

再來談談原子性:

volatile:不能完全實現可見性,如果你的當前值以來與之前的值

鎖:一定能實現原子性----》在多執行緒情況下是程式會被序列執行

java併發 原子性和可見性(7)

原子性 某個操作同時只能由乙個執行緒執行。可見性 乙個執行緒的修改對其他執行緒是可見的。也就是a執行緒修改了變數x,那麼b,c,d.執行緒此時去拿到的x肯定是a修改之後的值。package com.concurenny.chapter.six public class atomicitydemo s...

原子性,可見性,有序性

1.原子性 read,load,assign,use,store write 基本型別的訪問,讀寫 long,double 非原子性協定 monitorenter,monitorexit jvm lock,unlock,synchronized 2.可見性 volatile synchronized...

執行緒的原子性與可見性

同步最基本的目的是保證原子性。另乙個容易忽略的目的是可見性,即乙個執行緒修改的共享資料對另乙個執行緒可見。因為一些基本型別的賦值操作本身是原子的。所以針對這些賦值操作在不使用synchronized的情況下,可以使用volatile來解決乙個執行緒的修改對另乙個執行緒的可見。所以volatile是在...