原子性
原子性是指一個操作不可中斷,要麼完全成功,要麼失敗
- Atomic包,競爭激烈,性能好,但只能維持一個值
- synchrinized,不可中斷,適合競爭不激烈的環境
- 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