Java 并发编程之 AtomicIntegerFieldUpdater AtomicLongFieldUpdater AtomicReferenceFieldUpdater
Java juc 大约 2082 字说明
并发原子修改器,保证在多线程环境下对象中的字段的原子性。
示例
对象类
public class FieldUpdaterTest {
volatile String name;
volatile int age1;
volatile Integer age2;
volatile long money1;
volatile Long money2;
}
AtomicIntegerFieldUpdater
只能是基础类型的int
,不能是Integer
包装类型。
public class AtomicIntegerFieldUpdaterDemo {
public static void main(String[] args) {
FieldUpdaterTest fieldUpdaterTest = new FieldUpdaterTest();
AtomicIntegerFieldUpdater<FieldUpdaterTest> updater1 =
AtomicIntegerFieldUpdater.newUpdater(FieldUpdaterTest.class, "age1");
System.out.println(updater1.compareAndSet(fieldUpdaterTest, 0, 10));
System.out.println(fieldUpdaterTest.age1);
// 必须是基础类型的 int
// AtomicIntegerFieldUpdater<FieldUpdaterTest> updater2 =
// AtomicIntegerFieldUpdater.newUpdater(FieldUpdaterTest.class, "age2");
}
}
AtomicLongFieldUpdater
只能是基础类型的long
,不能是Long
包装类型。
public class AtomicLongFieldUpdaterDemo {
public static void main(String[] args) {
FieldUpdaterTest fieldUpdaterTest = new FieldUpdaterTest();
AtomicLongFieldUpdater<FieldUpdaterTest> updater1 =
AtomicLongFieldUpdater.newUpdater(FieldUpdaterTest.class, "money1");
System.out.println(updater1.compareAndSet(fieldUpdaterTest, 0, 10));
System.out.println(fieldUpdaterTest.money1);
// 必须是基础类型的 long
// AtomicLongFieldUpdater<FieldUpdaterTest> updater2 =
// AtomicLongFieldUpdater.newUpdater(FieldUpdaterTest.class, "money2");
}
}
AtomicReferenceFieldUpdater
public class AtomicReferenceFieldUpdaterDemo {
public static void main(String[] args) {
FieldUpdaterTest fieldUpdaterTest = new FieldUpdaterTest();
AtomicReferenceFieldUpdater<FieldUpdaterTest, String> updater =
AtomicReferenceFieldUpdater.newUpdater(FieldUpdaterTest.class, String.class, "name");
System.out.println(updater.compareAndSet(fieldUpdaterTest, null, "张三"));
System.out.println(fieldUpdaterTest.name);
}
}
阅读 1113 · 发布于 2021-09-25
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Windows 删除服务阅读 1269
-
Telepresence 设置配置文件更改默认配置阅读 996
-
Git 合并两个分支阅读 2153
-
使用 Packer.js 压缩 HTML 和 JavaScript阅读 12513
-
微信小程序基于 Parser 添加长按复制、代码高亮等功能阅读 4568
-
PostgreSQL 修改数据库拥有者阅读 3263
-
Android 自动提示控件 AutoCompleteTextView阅读 2208
-
Linux 命令之 tail -f 显示行号阅读 12768
-
Element UI DatePicker 时间跨度限制在同一个月内阅读 5873
-
GoJS 更改 Overview 的拖动框颜色阅读 1463