当前位置: 首页 > news >正文

AtomicInteger

        AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子类,用于在多线程环境下对整数进行原子操作。

核心特性

原子性

提供线程安全的原子操作(如自增、加法、比较并交换等),确保在多线程环境中操作不会被中断,避免数据竞争。

无锁机制

基于 CAS(Compare-And-Swap) 实现,通过 CPU 指令直接支持无锁并发,减少线程阻塞,提升性能。

内存可见性

内部使用 volatile 修饰的 int 值,保证修改的可见性,写操作立即对其他线程可见。

常用方法 

方法描述
int get()获取当前值。
void set(int newValue)设置新值。
int getAndIncrement()相当于 i++,返回旧值。
int incrementAndGet()相当于 ++i,返回新值。
int getAndAdd(int delta)原子地加上 delta,返回旧值。
int addAndGet(int delta)原子地加上 delta,返回新值。
boolean compareAndSet(int expect, int update)如果当前值等于 expect,则设置为 update,返回是否成功。
int updateAndGet(IntUnaryOperator updateFunction)应用函数更新值,返回新值。例如:x -> x * 2

底层实现

  • CAS 操作:通过 Unsafe 类调用底层 CAS 指令(如 compareAndSwapInt),在循环中不断尝试更新,直到成功。

  • volatile 变量:内部值 private volatile int value 保证可见性。

AtomicInteger 是轻量级的线程安全整数操作类,适用于单变量的原子更新场景。 

import java.util.concurrent.atomic.AtomicInteger;public class ThreadSafe {static int a = 0;public static void main(String[] args) throws InterruptedException {AtomicInteger b = new AtomicInteger(0);Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {for(int i=0;i<1000;i++){a++;b.incrementAndGet();}}});Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {for(int i=0;i<1000;i++){a++;b.incrementAndGet();}}});thread1.start();thread2.start();//等待thread1与thread2执行完毕Thread.sleep(1000);System.out.println(a);//1824System.out.println(b);//2000}
}

 从代码的执行结果可以看到,int类型是线程不安全的,而AtomicInteger类型则是完全线程安全的。

推荐使用AtomicInteger:1114. 按序打印 - 力扣(LeetCode)

相关文章:

  • 信息收集+初步漏洞打点
  • springboot配置tomcat端口的方法
  • 单细胞转录组(3)
  • DAY28-类的定义和方法
  • 深入解析Spring Boot与Spring Security的集成实践
  • 无线数传模块支持园区多节点电力参数同步监测配置指南
  • Java 注解篇:@RequestMapping
  • 大模型技术演进与应用场景深度解析
  • LVGL- Calendar 日历控件
  • 联想笔记本黑屏了,排线出问题还是静电
  • jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程
  • Mysql 8.0.32 union all 创建视图后中文模糊查询失效
  • 数字电子技术基础(五十九)——脉冲触发的触发器
  • (8)python开发经验
  • 开源安全大模型Foundation-Sec-8B实操
  • Vim编辑器命令模式操作指南
  • python打卡day28
  • Florence2代码实战
  • STM32IIC实战-OLED模板
  • 端口443在git bash向github推送时的步骤
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长
  • 独家 |《苏州河》上海上演,编剧海飞:上海的风能吹透我
  • 泰山、华海、中路等山东险企综合成本率均超100%,承保业务均亏损
  • 女孩患异食癖爱吃头发,一年后腹痛入院体内惊现“头发巨石”
  • 中国乒协坚决抵制恶意造谣,刘国梁21日将前往多哈参加国际乒联会议
  • 沪喀同心|为新疆青少年提供科普大餐,“小小博物家(喀什版)”启动