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);
}
}
阅读 532 · 发布于 2021-09-25
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Android 软键盘遮挡控件阅读 978
-
MySQL 聚集索引和非聚集索引阅读 880
-
面试题:HTTP2.0 与 HTTP1.1 的区别阅读 2715
-
IntelliJ IDEA 选择 Open matching files in associated application后更改打开方式阅读 3891
-
Spring Boot logback springProperty 设置默认值阅读 2969
-
Android 监听 Home 键阅读 1299
-
MySQL Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root阅读 2012
-
OpenResty 中使用 lua-resty-http 完成 HTTP 请求阅读 9595
-
Notepad++ 保存 Ctrl-S 显示 DC3 ,搜索 Ctrl-F 显示 ACK 解决办法阅读 5419
-
Arthas 使用 retransform 热更新 Srping Boot 代码阅读 1884