「死磕Java并发编程」说说Java Atomic 原子类的实现原理

本文探讨了Java并发编程中的Atomic原子类,包括AtomicInteger的源码分析和AtomicLong与LongAdder的性能对比。文章指出,Atomic类通过CAS(Compare and Swap)操作实现线程安全,而在高并发场景下,LongAdder通常表现更优。此外,文章强调了volatile关键字在保证线程可见性方面的作用,并提到在面对复杂业务逻辑时,加锁仍然是必要的。
摘要由CSDN通过智能技术生成

《死磕 Java 并发编程》系列连载中,大家可以关注一波。

「死磕 Java 并发编程」阿里二面,面试官:说说 Java CAS 原理?

「死磕 Java 并发编程」面试官:说说什么是 Java 内存模型(JMM)?

「死磕 Java 并发编程」10张图告诉你Java并发多线程那些破事

 

目录

线程安全真的是线程的安全吗?

什么是 Atomic?

实现一个计数器

AtomicInteger 源码分析

AtomicLong 和 LongAdder 谁更牛?

总结


当我们谈论『线程安全』的时候,肯定都会想到 Atomic 类。不错,Atomic 相关类都是线程安全的,在讲 Atomic 类之前我想再聊聊『线程安全』这个概念。

线程安全真的是线程的安全吗?

初看『线程安全』这几个字,很容易望文生义,这不就是线程的安全吗?其实不是,线程本身没有好坏,没有『安全的线程』和『不安全的线程』之分,俗话说:人之初性本善,线程天生也是纯洁善良的,真正让线程变坏是因为访问的变量的原因,变量对于操作系统来说其实就是内存块,所以绕了这么一大圈,线程安全称为『内存的安全』可能更为贴切。

简而言之,线程访问的内存决定了这个线程是否是安全的。

变量大致可以分为局部变量共享变量,局部变量对于 JVM 来说是栈空间,大家都背过八股文,栈是线程私有的是非共享的,那自然也是内存安全的;共享变量对于 JVM 来说一般是存在于堆上,堆上的东西是所有线程共享的,如果不加任何限制自然是不安全的。

因为线程安全这个概念已经深入人心了,所以后面我们还是用线程安全来表达内存安全的含义。

那如何解决这种不安全呢?方法有很多,比如:加锁、Atomic 原子类等。

好了,咱们今天先来看看Atomic类

什么是 Atomic?

JavaJDK1.5开始提供java.util.concurrent.atomic包,这里包含了多个原子操作类。原子操作类提供了一个简单、高效、安全的方式去更新一个变量。

20210602205949-2021-06-02-20-59-50

Atomic 包下的原子操作类有很多,可以大致分为四种类型:

  • 原子操作基本类型

  • 原子操作数组类型

  • 原子操作引用类型

  • 原子操作更新属性

Atomic

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值