java-原子类
一、JUC包中原子类包括了哪四类
1、基本类型
1.1AtomicInteger:整形原子类
1.2AtomicLong:长整型原子类
1.3AtomicBoolean:布尔型原子类
2、数组类型
2.1AtomicIntegetArray:整形数组原子类
2.2AtomicLongArray:长整形数组原子类
2.3AtomicReferenceArray:引用类型数组原子类
3、引用类型
3.1AtomicReference:引用类型原子类
3.2AtomicStampedReference:原子更新带有版本号的应用类型,该类型将数值与引用关联起来,可用于解决原子的
更新数据和版本号,可以解决使用CAS进行原子更新时可能出现的ABA问题。
3,3AtomicMarkableReference:原子更新带有标记为的引用类型。
4、对象的属性修改类型
4.1AtomicReferenceFieldUpdater:原子更新应用类型字段的更新器
三、AtomicInteger的使用
AtomicInteger类常用方法
1 2 3 4 5 6 7 | public final int get() //获取当前的值 public final int getAndSet( int newValue) //获取当前的值,并设置新的值 public final int getAndIncrement() //获取当前的值,并自增 public final int getAndDecrement() //获取当前的值,并自减 public final int getAndAdd( int delta) //获取当前的值,并加上预期的值 boolean compareAndSet( int expect, int update) //如果输入的数值等于预期值,则以原子方式将该值设置为输入值(update) public final void lazySet( int newValue) //最终设置为newValue,使用 lazySet 设置之后可能导致其他线程在之后的一小段时间内还是可以读到旧的值。 |
使用原子类后,不用对方法加锁也可以保证线程安全。
四、介绍AtomicInteger类的原理
AtomicIntegert主要利用的还是CAS+volatile和native方法保证原子操作,避免了synchronized的高开销,执行效率就可以大为提升。
UnSafe 类的 objectFieldOffset() 方法是一个本地方法,这个方法是用来拿到“原来的值”的内存地址,返回值是 valueOffset。
另外 value 是一个 volatile 变量,在内存中可见,因此 JVM 可以保证任何时刻任何线程总能拿到该变量的最新值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?