Udemy Course Multithreading, Concurrency & Performance 16

Atomic Operations基本概念與volatile修飾字

ZONGRU Li
Jul 27, 2021

由前節可知要簡單限定Atomic Operation只要簡單加入修飾字synchronized

但是加入過多的synchronized修飾字會導致Multithread在同一時間內

無法同時處理synchronized修飾的邏輯演算(Atomic Operation)

甚至許多threads可能都在排隊進到Atomic Operation,意味著

花費更多的context switch,及memory overhead

所以要盡可能地減小synchronized鎖定的範圍

但是除了我們主動加入修飾字synchronized

其實Java也有些演算本身就是Atomic Operation

(不過不是全部都是Atomic Operation)

哪些Java Code本身就是Atomic Operation?

1.所有的reference assignments都是Atomic

EX:

Object a = new Object();

Object b= new Object();

a = b; //←這個是Atomic

即一般Java bean裡面的getter setter都是Atomic,不用另加synchronized

(不管是一般變數還是array的getter setter都是!)

2.讀寫原始型別是Atomic(除了long/double),如以下

int

short

byte

float

char

boolean

而long與double因為是64bits,如下例

long x = 5;

long y = 10;

x = y;//這個過程可能會有兩步,先做低位的32bits後再做高位32bits賦值

但是Java針對這兩個型別有特別的解法(加入volatile修飾字) EX:

volatile double x =1.0;

volatile double y=9.0;

x = y;//這是Atomic

3.Java本身有些class(如java.util.concurrent.atomic)是Atomic

後面會在介紹這些class

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet