`

Java中的13个原子操作类

阅读更多
说明:本篇文章是在阅读《Java 并发编程艺术》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步!

该项目的地址:https://github.com/xiaoheng1/concurrent-programming

欢迎有兴趣的小伙伴加入,一起讨论、分析,共同进步!

atomic 包中的 13 个类,属于 4 中类型的原子更新方式.
(1)原子更新基本类型
(2)原子更新数组
(3)原子更新引用
(4)原子更新属性

atomic 包里的类基本都是使用 Unsafe 实现的包装类.

1.原子更新基本类型
(1) AtomicBoolean
(2) AtomicInteger
(3) AtomicLong

本类以 AtomicInteger 进行讲解:

int addAndGet(int delta) 以原子方式将输入的数值与实例中的值相加,并返回结果

boolean compareAndSet(int expect, int update) 如果输入的数值等于预期值,则以原子的方式将该值设置为输入的值.

int getAndIncrement() 以原子方式将当前值加 1,注意,这里返回的是自增前的值.

void lazySet(int newValue) 最终会设置成 newValue,使用 lazySet 设置值后,可能导致其他线程在之后的一小段时间内还是可以读到
旧值.

int getAndSet(int newValue) 以原子方式设置为 newValue 的值,并返回旧值.

getAndIncrement 是如何实现原子操作的了?

public final int getAndIncrement() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return current;
    }
}

我们可以看到,它的实现原理是死循环 + CAS.

2.原子更新数组
(1) AtomicIntegerArray 原子更新整形数组里的元素
(2) AtomicLongArray 原子更新长整形数组里的元素
(3) AtomicReferenceArray 原子更新引用类型数组里的元素

AtomicIntegerArray 类提供方法如下:
(1) int addAndGet(int i, int delta) 以原子方式将输入值与数组中的索引 i 的元素相加
(2) boolean compareAndSet(int i, int expect, int update) 如果当前值等于预期值,则以原子方式将数组位置 i 的元素设置成 update 值.

3.原子更新引用类型

原子更新基本类型的 AtomicInteger, 只能更新一个变量,如果要原子更新多个变量,就需要使用这个原子更新引用类型提供的类.
(1) AtomicReference 原子更新引用类型
(2) AtomicReferenceFieldUpdate 原子更新引用类型里的字段
(3) AtomicMarkableReference 原子更新带有标记位的引用类型.
1
0
分享到:
评论

相关推荐

    Java 并发学习笔记:进程和线程,并发理论,并发关键字,Lock 体系,原子操作类,发容器 & 并发工具,线程池,并发实践

    原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行。Java具有简单、可移植、高性能和...

    java并发之原子操作类和非阻塞算法

    主要为大家详细介绍了java并发之原子操作类和非阻塞算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java并发学习-AtomicIntegerFieldUpdater字段原子更新类.docx

     也就是说调用者能够直接操作对象字段 ,那么就可以反射进行原子操作。 对于父类的字段,子类是不能直接操作的,尽管子类可以访问父类的字段。 只能是实例变量,不能是类变量,也就是说不能加static关键字。 ...

    Java多线程Atomic包操作原子变量与原子类详解

    主要介绍了Java多线程Atomic包操作原子变量与原子类详解,简单介绍了Atomic,同时涉及java.util.concurrent中的原子变量,Atomic类的作用等相关内容,具有一定参考价值,需要的朋友可以了解下。

    《Java并发编程的艺术》源代码

    第7章介绍了Java中的原子操作类,并给出一些实例。 第8章介绍了Java中提供的并发工具类,这是并发编程中的瑞士军刀。 第9章介绍了Java中的线程池实现原理和使用建议。 第10章介绍了Executor框架的整体结构和成员组件...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

    java线程并发库ppt

    java线程并发库原子操作类与线程池的讲解,自我总结大家分享

    Java并发编程的艺术

    第7章介绍了Java中的原子操作类,并给出一些实例。第8章介绍了Java中提供的很多并发工具类。第9章介绍了Java中的线程池实现原理和使用建议。第10章介绍了Executor框架的整体结构和成员组件。第11章介绍几个并发编程...

    java编发编程:JUC综合讲解

    原子操作是不可再分割的基本操作,JUC 提供了一系列原子操作类,如 AtomicInteger、AtomicLong 等。 4. 同步器(Synchronizers):JUC 中的同步器主要通过 AQS(AbstractQueuedSynchronizer)提供支持。

    Java concurrency之AtomicReference原子类_动力节点Java学院整理

    AtomicReference是作用是对"对象"进行原子操作。这篇文章主要介绍了Java concurrency之AtomicReference原子类,需要的朋友可以参考下

    Java concurrency之AtomicLong原子类_动力节点Java学院整理

    AtomicLong是作用是对长整形进行原子操作。下面通过本文给大家介绍Java concurrency之AtomicLong原子类的相关知识,感兴趣的朋友一起看看吧

    使用Java的Memory Model实现一个简单的计数器.txt

    `AtomicInteger`是一个支持原子操作的整数类,它内部使用了CAS(Compare And Swap)算法来实现线程安全的操作。在这个计数器中,我们使用`AtomicInteger`的`incrementAndGet()`方法来实现自增操作,并使用`get()`...

    Java Unsafe类的使用.docx

    Unsafe类是rt.jar包中的类,它提供了原子级别的操作,它的方法都是native...因此,Unsafe类的方法可以说是Java高并发的各种扩展类的基础,他们的底层都是调用Unsafe类的方法,Unsafe类为各种扩展类提供底层的原子操作。

    JAVA实现Modbus RTU或Modbus TCPIP数据采集.rar

    5.将复合操作放在一个原子操作中执行,或用相同的锁来保护每个共享的和可变的变量。 6.增加同步必然会导致代码的复杂性,为性能牺牲代码简单性时不要太盲目,因为越复杂的代码,其不安全性越大。

    java高并发相关知识点.docx

    线程池:Java中的线程池机制,包括线程池的创建、执行任务、关闭等操作。 并发集合:Java中的并发集合,包括ConcurrentHashMap、ConcurrentLinkedQueue、CopyOnWriteArrayList等。 并发控制:Java中的并发控制机制,...

    毕业就业-刷题库Java面试题大全(2021年-2022年).rar

    a面试大全2021是一套最新Java面试必问合集,这本面试手册包含了Java基础、Java集合、JVM、Spring、Spring Boot、Spring Cloud、Mysql、Redis、RabbitMQ、Dubbo、Netty、分布式及...7、原子操作类 8、并发工具 未完待续

    2万字Java并发编程面试题合集(含答案,建议收藏)

    10、什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?11、Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?12、什么是 Executors 框架?13、什么是...

    JAVA面试必成功之JAVA面试秘籍

    JAVA面试秘籍一份通向理想互联网公司的面试汇总,包括Java基础、Java并发、JVM、MySQL、Redis、Spring、MyBatis、Kafka、计算机操作系统、计算机网络、系统设计、分布式...十三、计算机网络 十四、操作系统 十五、Dubbo

    Java并发编程Xmind思维导图

    Java并发编程Xmind思维导图,思路更清晰。内容来自《Java并发编程的艺术》,包括并发机制底层原理、Java内存模型、Java并发编程基础、锁机制、线程池、并发工具类、原子操作类、并发容器和框架。纯手打,非诚勿扰。

Global site tag (gtag.js) - Google Analytics