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

2021-08-10 22:22:01 字數 510 閱讀 9109

原子性:某個操作同時只能由乙個執行緒執行。

可見性:乙個執行緒的修改對其他執行緒是可見的。也就是a執行緒修改了變數x,那麼b,c,d...執行緒此時去拿到的x肯定是a修改之後的值。

package com.concurenny.chapter.six;

/** */

public class atomicitydemo ).start();

} // 原子操作,不會有問題

// for (int i = 0; i < 200; i++) ).start();

// }

} public static int add(int plus)

// 加上synchronized之後,保證了原子性和可見性。因為同時只能有乙個執行緒執行該方法,執行完畢會將變數count的值重新整理到記憶體中。其他執行緒執行該方法會得到新值。

public static synchronized int add2(int plus)

}

synchronize的可見性和原子性

synchronize 可以保證變數可見性和一段 的原子性 jmm關於synchronized的兩條可見性規定 執行緒解鎖前,必須把共享變數的最新值重新整理到主記憶體中 執行緒加鎖時,將清空工作記憶體中共享變數的值,從而使用共享變數時需要從主記憶體中重新讀取最新的值 參考 reentrantlock...

JMM的可見性和原子性

乙個方法中相鄰的2行 不一定按從上到下的順序執行 jmm允許編譯器和處理器對指令重排序。as if serial語義 不管怎麼重排序 編譯器和處理器為了提高並行度 單執行緒 程式的執行結果不能被改變。編譯器 runtime和處理器都必須遵守as if serial語義。編譯器和處理器不會對存在資料依...

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

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