線程安全Atomic與volatiel及同步鎖

AtomicBoolean 線程安全的初始化boolean
保證高併發情況下只有一個線程能夠訪問這個屬性(與volatile相似)

Atomic方式:

Atomic原子性,具有執行一個或多個時,要麼全都執行要麼都不執行

public static AtomicBoolean initialized = new AtomicBoolean(false);

volatile方式:

public static volatile boolean initialized = false;

難道Boolean不安全?其實boolean被自動裝箱成Boolean,Boolean.true與false卻是兩個對象.
所以在使用同步代碼塊鎖住屬性時可要注意了,你可能以爲鎖的是一個對象其實兩個,或者鎖的兩個其實是一個造成死鎖
使用synchronized鎖的三鍾用法

  • 同步實例方法,鎖的是當前實例對象
    • 將synchronized關鍵字加在方法前面,鎖定的對象是當前類的this對象,跟括號裏面寫this是一樣的。這樣枷鎖必須保證單例。
  • 同步類方法,鎖的是當前類對象
    • 如果加了synchronized的方法是靜態方法,則鎖定的對象是當前實例的class對象
  • 同步代碼塊,鎖是括號裏面的對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章