AtomicInteger源代码分析

本文详细探讨了AtomicInteger的底层原理,包括自旋锁和CAS操作的应用,对比了JDK1.7与1.8的实现差异,以及其在乐观锁和ABA问题上的优缺点。重点讲解了AtomicInteger的适用场景和限制,适合读多写少的并发场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

AtomicInteger的本质:自旋锁+CAS原子操作

 

源代码:

初始化

 

使用Unsafe类,定义偏移量 valueOffset,类加载就初始化。用于原子操作CAS

本质

Valatile私有,并且用volatile修饰

 

 

 

 

 

Jdk1.7和1.8实现不一样

Jdk1.7及以前

 

1.获取volatitle修饰的变量,最新的主存值

2.value+1作为自增值

3. compare value是否就是主存值,是,set nextreturn next;否,循环下一次

JDK1.8及以后

 

优缺点

AtomicInteger的优点

1.乐观锁,性能较强,利用CPU自身的特性保证原子性,即CPU的指令集封装compare and swap两个操作为一个指令来保证原子性。

2.适合读多写少模式

AtomicInteger的缺点

1.自旋,消耗CPU性能,所以写的操作较多推荐synchronized

2.仅适合简单的运算,否则会产生ABA问题,自旋的时候,别的线程可能更改value,然后又改回来,此时需要加版本号解决,JDK提供了AtomicStampedReferenceAtomicMarkableReference解决ABA问题,提供基本数据类型和引用数据类型版本号支持

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值