日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的13个原子操作类

發布時間:2025/3/11 java 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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个原子操作类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。