Java中的13个原子操作类
點擊上方“Java中文社群”,選擇“設為星標”
終身學習者,以編程為樂!
來源:https://www.iteye.com/blog/xiaoheng-2509522
atomic 包中的 13 個類,屬于 4 中類型的原子更新方式.
原子更新基本類型
原子更新數組
原子更新引用
原子更新屬性
atomic 包里的類基本都是使用 Unsafe 實現的包裝類.
1.原子更新基本類型
AtomicBoolean? ?
AtomicInteger
AtomicLong? ??
本類以 AtomicInteger 進行講解:
int addAndGet(int delta) 以原子方式將輸入的數值與實例中的值相加,并返回結果
boolean compareAndSet(int expect, int update) 如果輸入的數值等于預期值,則以原子的方式將該值設置為輸入的值.
int getAndIncrement() 以原子方式將當前值加 1,注意,這里返回的是自增前的值.
void lazySet(int newValue) 最終會設置成 newValue,使用 lazySet 設置值后,可能導致其他線程在之后的一小段時間內還是可以讀到 舊值.
int getAndSet(int newValue) 以原子方式設置為 newValue 的值,并返回舊值.
getAndIncrement 是如何實現原子操作的了?
public final int getAndIncrement() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next)) return current; } }我們可以看到,它的實現原理是死循環 + CAS.
2.原子更新數組
AtomicIntegerArray 原子更新整形數組里的元素
AtomicLongArray 原子更新長整形數組里的元素
AtomicReferenceArray 原子更新引用類型數組里的元素
AtomicIntegerArray 類提供方法如下:(1) int addAndGet(int i, int delta) 以原子方式將輸入值與數組中的索引 i 的元素相加 (2) boolean compareAndSet(int i, int expect, int update) 如果當前值等于預期值,則以原子方式將數組位置 i 的元素設置成 update 值.
3.原子更新引用類型
原子更新基本類型的 AtomicInteger, 只能更新一個變量,如果要原子更新多個變量,就需要使用這個原子更新引用類型提供的類.? ??
AtomicReference 原子更新引用類型
AtomicReferenceFieldUpdate 原子更新引用類型里的字段
AtomicMarkableReference 原子更新帶有標記位的引用類型.
【END】
關注下方二維碼,訂閱更多精彩內容
總結
以上是生活随笔為你收集整理的Java中的13个原子操作类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试突击 | Redis 如何从海量数据
- 下一篇: 超3000岗位!腾讯产业互联网新年大扩招