欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

AtomicReference如何保證對象在共享變量的原子操作

林玟書2年前18瀏覽0評論

AtomicReference如何保證對象在共享變量的原子操作?

AtomicReference 屬于 Java 并發包下面的一個原子操作類,其可以原子更新引用類型。示例代碼如下所示:

AtomicReference<User> atomicUserRef = new AtomicReference<User>();

User user = new User("Tom");

atomicUserRef.set(user);

User updateUser = new User("Lili");

// 原子更新引用類型

atomicUserRef.compareAndSet(user, updateUser);

AtomicReference 在多線程環境下,能夠做到原子更新引用類型主要由以下兩個原因:

一、在 AtomicReference 內部定義了一個 volatile 類型的引用,用于存儲當前引用類型:

private volatile V value;

volatile 能夠保證 A 線程更新了 value 值后,B 線程能即時看到。即可見性。

二、compareAndSet 借助的是 unsafe 類進行更新的:

public final boolean compareAndSet(V expect, V update) {

return unsafe.compareAndSwapObject(this, valueOffset, expect, update);

}

Unsafe 類最終調用的是 C++ 方法,C++ 最終調用的是處理器提供的用于原子更新的 CAS (Compare And Swap) 指令。當前絕大多數處理器都已經實現了這個指令,所以原子更新是需要底層處理器指令支持的。