黑马程序员技术交流社区

标题: 【上海校区】【Java并发】Java中的原子操作 [打印本页]

作者: 不二晨    时间: 2018-12-31 10:14
标题: 【上海校区】【Java并发】Java中的原子操作
原子更新基本类型

一个生动的例子

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



作者: 不二晨    时间: 2019-1-3 10:07
奈斯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2