A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

原子更新基本类型

一个生动的例子

public class AtomicIntegerExample {

        private static AtomicInteger atomicInteger = new AtomicInteger(1);

        public static void main(String[] args) {
                System.out.println(atomicInteger.getAndIncrement());
                System.out.println(atomicInteger.get());
        }
}
1
2
3
4
5
6
7
8
9
原子更新数组

一个生动的例子

public class AtomicIntegerArrayExample {

        static int[] value = new int[] { 1, 2 };

        static AtomicIntegerArray ai = new AtomicIntegerArray(value);

        public static void main(String[] args) {
                System.out.println(ai.getAndSet(0, 3));
                System.out.println(ai.get(0));
                System.out.println(value[0]);
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
数组value是通过构造函数传递进去,然后AtomicIntegerArray 会将当前数组复制一份

原子更新引用类型

一个生动的例子

public class AtomicReferenceExample {

        public static void main(String[] args) {
                User user = new User("conan", 15);
                AtomicReference<User> atomicReference = new AtomicReference<User>();
                atomicReference.set(user);
                User updateUser = new User("Shinichi", 17);
                atomicReference.compareAndSet(user, updateUser);
                System.out.println(atomicReference.get().getName());
                System.out.println(user.getName());
        }

        static class User {
                private String name;
                private int old;

                public User(String name, int old) {
                        this.name = name;
                        this.old = old;
                }

                public String getName() {
                        return name;
                }

                public int getOld() {
                        return old;
                }
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
原子更新字段类

一个生动的例子

public class AtomicIntegerFieldUpdaterExample {

        public static void main(String[] args) {
                AtomicIntegerFieldUpdater<User> a = AtomicIntegerFieldUpdater.newUpdater(User.class, "old");
                User conan = new User("conan", 10);
                System.out.println(a.getAndIncrement(conan));
                System.out.println(a.get(conan));
                System.out.println(conan.getOld());
        }

        static class User {
                private String name;
                public volatile int old;

                public User(String name, int old) {
                        this.name = name;
                        this.old = old;
                }

                public String getName() {
                        return name;
                }

                public int getOld() {
                        return old;
                }

        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
更新类的字段必须使用public volatile修饰符。
---------------------
转载,仅作分享,侵删
作者:EagleLi1
原文:https://blog.csdn.net/qq_21687635/article/details/84673641


1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马