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對象
- 同步代碼塊,鎖是括號裏面的對象