Java原子性操作及應用

1 原子性

原子性:一個操作,或者多個操作,要麼全部執行並且執行的過程中 不會被任何因素打斷,要麼就 都不執行

2 原子性操作

和原子性是一個意思,不需要 synchronized。指不會被線程調度機制打斷的操作,這種操作,一旦開始,就一直運行到結束,中間不會有任何 context switch
原子操作可以是一個步驟,也可以是多個操作步驟,但其 順序不可以被打亂,也 不可以被切割而只執行其中的一部分,將 整個操作視作一個整體 是原子性的核心特徵

3 Java原子性操作的理解(賦值和自增自減)
3.1 賦值操作是否是原子性 — 不是
  • 不管是基礎數據類型還是引用數據類型,都不是原子操作
  • 以結果論的話,局部變量基本數據類型的賦值操作,局部引用類型的 null賦值 是原子性的
  • 在 Java中,任何賦值操作都不是原子操作。它都具有先將被賦入的值加載到棧中,然後再賦值給變量
  • 像 int a = b ; 這種方式的賦值也不是原子操作,因爲它需要 先加載 b變量的值到棧中,然後再賦值給a
3.2 自增自減操作是否是原子性 — 不是
  • 只有局部變量的 int類型,且 自增自減的幅度在 -32768 ~ 32767 時,局部變量的 int類型的 自增自減操作都是通過 iinc 或 iinc_w 一條指令完成的
  • 其他數據類型一定要有壓棧,運算,存回的操作
    參考文章1參考文章2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章