原子性

原子性

原子性是指一個操作不可中斷,要麼完全成功,要麼失敗

  1. Atomic包,競爭激烈,性能好,但只能維持一個值
  2. synchrinized,不可中斷,適合競爭不激烈的環境
  3. Lock,可中斷,競爭激烈

Atomic

內部包含一個用volatile修飾的變量

private volatile int value;

實際操作的是unsafe類

private static final Unsafe unsafe = Unsafe.getUnsafe();

public final int getAndIncrement() {
    return unsafe.getAndAddInt(this, valueOffset, 1);
}

原理爲native的CAS(樂觀鎖)+自旋鎖

synchrinized

synchrinized是根據monitor監視器實現的,這個監視器由native實現,大概原理爲

線程A-》執行對象方法b
	獲取monitor失敗-》等待
	獲取monitor成功
		-》monitor的count+1
			->線程A執行完成或wait時,釋放monitor,count-1
PS:monitor同一時間只允許一個線程訪問這個對象

Lock

Lock底層的實現原理是AQS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章