并发编程AtomicInteger详解
AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子变量类,用于对 int 类型的变量进行原子操作。它利用底层的 CAS(Compare-And-Swap)机制,实现了无锁的线程安全。AtomicInteger 常用于需要高效、线程安全地对整数进行更新的场景。以下是 AtomicInteger 的常见使用场景和示例。
AtomicInteger 是 Java 并发编程中非常有用的工具,提供了高效的原子操作,避免了使用锁的开销和复杂性。它适用于计数器、ID 生成器、限流器、状态管理和非阻塞算法等场景。理解和正确使用 AtomicInteger,有助于编写高效且正确的并发程序。
常见使用场景
计数器
public class Counter {private AtomicInteger count = new AtomicInteger(0);public void increment() {count.incrementAndGet();}public int getCount() {return count.get();}
}
用于实现高效的线程安全计数器,避免使用传统的同步方法。
并发 ID 生成器
public class IdGenerator {private AtomicInteger id = new AtomicInteger(0);public int generateId() {return id.incrementAndGet();}
}
生成全局唯一的 ID,例如生成任务 ID、订单号等。
限流器
public class RateLimiter {private AtomicInteger currentRequests = new AtomicInteger(0);private int maxRequests;public RateLimiter(int maxRequests) {this.maxRequests = maxRequests;}public boolean tryAcquire() {if (currentRequests.incrementAndGet() <= maxRequests) {return true;} else {currentRequests.decrementAndGet();return false;}}public void release() {currentRequests.decrementAndGet();}
}
控制并发请求的数量,用于限流等场景。
状态管理:
public class Resource {private AtomicInteger state = new AtomicInteger(0);private static final int NOT_INITIALIZED = 0;private static final int INITIALIZING = 1;private static final int INITIALIZED = 2;public boolean initialize() {if (state.compareAndSet(NOT_INITIALIZED, INITIALIZING)) {// 执行初始化操作state.set(INITIALIZED);return true;}return false;}public boolean isInitialized() {return state.get() == INITIALIZED;}
}
管理共享资源的状态,例如资源的初始化状态。
非阻塞算法:
public class NonBlockingStack {private static class Node {int value;Node next;}private AtomicInteger top = new AtomicInteger(0);private Node[] stack;private AtomicInteger size = new AtomicInteger(0);public NonBlockingStack(int capacity) {stack = new Node[capacity];}public void push(int value) {Node newNode = new Node();newNode.value = value;while (true) {int currentTop = top.get();newNode.next = stack[currentTop];if (top.compareAndSet(currentTop, currentTop + 1)) {stack[currentTop] = newNode;size.incrementAndGet();return;}}}public Integer pop() {while (true) {int currentTop = top.get();if (currentTop == 0) {return null;}Node node = stack[currentTop - 1];if (top.compareAndSet(currentTop, currentTop - 1)) {size.decrementAndGet();return node.value;}}}public int getSize() {return size.get();}
}
AtomicInteger 常用于实现无锁算法,提供高效的并发控制。
示例代码
以下是一个使用 AtomicInteger 实现并发计数器的示例:
import java.util.concurrent.atomic.AtomicInteger;public class ConcurrentCounter {private AtomicInteger count = new AtomicInteger(0);public void increment() {count.incrementAndGet();}public int getCount() {return count.get();}public static void main(String[] args) throws InterruptedException {ConcurrentCounter counter = new ConcurrentCounter();Runnable task = () -> {for (int i = 0; i < 1000; i++) {counter.increment();}};Thread thread1 = new Thread(task);Thread thread2 = new Thread(task);thread1.start();thread2.start();thread1.join();thread2.join();System.out.println("Final count: " + counter.getCount());}
}
在这个示例中,AtomicInteger 确保了在多线程环境中对计数器的并发更新是线程安全的。
相关文章:
并发编程AtomicInteger详解
AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子变量类,用于对 int 类型的变量进行原子操作。它利用底层的 CAS(Compare-And-Swap)机制,实现了无锁的线程安全。AtomicInteger 常用于需要高效、线程安全…...
ctfshow 权限维持 web670--web679
web670 <?php// 题目说明: // 想办法维持权限,确定无误后提交check,通过check后,才会生成flag,此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…...
职场生存指南
求职篇 面试潜台词分析 (1)介绍: “请做一下自我介绍?” ❌:慢吞吞的介绍:叫什么,来自学校,专业,工作了那几家公司。 问题目的:个人优势+岗位匹配度+个人身上技能标签 (2)反问: “你还有什么想问的吗?” 问题目的:对工作的好奇心+个人积极性<——岗位…...
Spring源码(八)--Spring实例化的策略
Spring实例化的策略有几种 ,可以看一下 InstantiationStrategy 相关的类。 UML 结构图 InstantiationStrategy的实现类有 SimpleInstantiationStrategy。 CglibSubclassingInstantiationStrategy 又继承了SimpleInstantiationStrategy。 InstantiationStrategy I…...
部署KVM虚拟化平台
文章目录 KVM虚拟化架构KVM组成KVM虚拟化三种模式 KVM虚拟化架构 KVM模块直接整合在Linux内核中 KVM组成 e KVM Driver虚拟机创建虚拟机内存分配虚拟CPU寄存器读写虚拟CPU运行 QEMU(快速仿真器) 模拟PC硬件的用户控件组件提供I/O设备模型及访问外设的途径 KVM虚拟化三种模式 客…...
Java对象模型深度剖析:从POJO到ENTITY
引言 在Java企业级应用开发中,对象模型是构建软件架构的核心。它们不仅帮助我们组织代码,还提升了代码的可读性和可维护性。本文将深入介绍Java中的几种关键对象模型:POJO、DTO、DAO、PO、BO、VO、QO和ENTITY,以及DO,…...
Nginx日志分析:编写Shell脚本进行全面日志统计
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。无论是在大流量的网站还是小型的个人博客中,Nginx都得到了广泛应用。在实际生产环境中,对Nginx日志的分析有助于我们了解网站的访问情况,发现潜在问题…...
【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)
【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下) 大家好 我是寸铁👊 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分…...
C语言——运算符及表达式
C语言——运算符及表达式 运算符运算符的分类(自增运算符)、--(自减运算符)赋值运算符逗号运算符(顺序求值运算符) 表达式 运算符 运算符的分类 C语言的运算符范围很宽,除了控制语句和输入输出…...
Python面试宝典第23题:分发糖果
题目 n 个孩子站成一排,给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果。 (1)每个孩子至少分配到 1 个糖果。 (2)相邻两个孩子评分更高的孩子会获得更多的糖果。 请…...
Java与模式及其应用场景知识点分享(电子版)
前言 Java 编程语言自1995年问世以来,其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因,而Java吸收总结了前人的经验教训,反映了最新技术(the state ofthe art),对其受到欢迎和采用,恐怕…...
软考高级第四版备考--第36天(审计内容)
IT内部控制审计:IT内部控制审计主要包括组织层面IT控制审计、IT一般控制审计及应用控制审计 IT专项审计:IT专项审计主要包括信息系统生命周期审计、信息系统开发过程审计、信息系统运行维护审计、网络与信息安全审计、信息系统项目审计、数据审计...
文件IO相关作业
1> 使用文件IO完成,将源文件中的所有内容进行加密(大写转小写、小写转大写)后写入目标文件中 源文件内容不变 #include<myhead.h>int main(int argc, const char *argv[]) {//判断传入的是否是两个文件if(argc!3){write(2,"inp…...
vue3 watch监听 父子组件通信
目录 01 watch监听方式 02 父子组件的通信 01 watch监听方式 1.watch(被监听的变量,(新值,旧值)>{ }) 默认直接就是深层监听 如果想要配置深度监听和默认触发 需要在第三个参数定义options对象 2.watch(被监听的变量,()>{},{ deep:true, immediate:true 项目打开后就执…...
【信创】adduser与useradd的区别 _ 统信 _ 麒麟 _ 中科方德
原文链接:【信创】adduser与useradd的区别 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇关于在信创终端操作系统上adduser和useradd命令区别的文章。adduser和useradd都是用于在Linux系统上添加用户的命令,但它们…...
微软Win11 24H2最新可选更新补丁26100.1301来袭!
系统之家于7月31日发出最新报道,微软针对Win11 24H2用户推出七月最新的可选更新KB5040529,本次更新为开始菜单引入了全新的账号管理器,也改进了任务栏上的小组件图标。接下来跟随系统之家小编来看看本次更新的详细内容吧!【推荐下…...
层次特征的尺度艺术:sklearn中的缩放技术
层次特征的尺度艺术:sklearn中的缩放技术 在机器学习中,特征缩放(Feature Scaling)是数据预处理的重要步骤,尤其对于基于距离的算法,如K-近邻(KNN)和支持向量机(SVM&…...
Chapter 21 深入理解JSON
欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、JSON数据格式1. 什么是JSON?2. JSON数据的格式 二、JSON格式数据转化三、格式化JSON数据的在线工具 前言 在当今数据驱动的世界中,JSON&…...
【C++高阶数据结构】红黑树:全面剖析与深度学习
目录 🚀 前言:红黑树与AVL树的比较一: 🔥 红黑树的概念二: 🔥 红黑树的性质 三: 🔥 红黑树节点的定义和结构🚀 3.1 基本元素🚀 3.2 节点颜色🚀 3.…...
前端基于 axios 实现批量任务调度管理器 demo
一、背景介绍 这是一个基于 axios 实现的批量任务调度管理器的 demo。它使用了axios、promise 等多种技术和原理来实现批量处理多个异步请求,并确保所有请求都能正确处理并报告其状态。 假设有一个场景:有一个任务列表,有单个任务的处理功能…...
RePKG:突破动态壁纸资源壁垒的开源工具
RePKG:突破动态壁纸资源壁垒的开源工具 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 当你面对一个包含丰富素材的动态壁纸资源包(PKG文件)却无…...
Realtek RTL8821CU无线网卡驱动解决方案 - Linux系统WiFi适配完美指南
Realtek RTL8821CU无线网卡驱动解决方案 - Linux系统WiFi适配完美指南 【免费下载链接】rtl8821CU Realtek RTL8811CU/RTL8821CU USB Wi-Fi adapter driver for Linux 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8821CU 你是否在Linux系统上使用Realtek RTL8821CU…...
当知识有了‘关系网‘:LightRAG如何让大模型‘秒懂‘你的文档?
想象一下,你有一座藏书万卷的图书馆,但你找书的方式只有一种——记住每本书某个页面的关键词,然后靠"猜"来定位。 这,就是传统RAG系统的尴尬处境。 今天要介绍的这个开源项目LightRAG,被顶会EMNLP 2025接收…...
Nunchaku FLUX.1-dev GPU算力优化:TensorRT加速推理实测对比
Nunchaku FLUX.1-dev GPU算力优化:TensorRT加速推理实测对比 如果你正在使用Nunchaku FLUX.1-dev模型生成图片,可能会发现一个问题:生成速度不够快,特别是当你想批量出图或者尝试不同参数时,等待时间有点长。 今天我…...
从服务暴露到语义裁剪:全面理解 SAP ABAP CDS projection view 的设计价值与实战用法
在很多 ABAP 开发者的直觉里,CDS view entity 已经足够强大:既能定义数据模型,也能承载丰富的语义注解,还能为 RAP、OData、分析场景提供统一的数据基础。可一旦进入真正的业务服务设计阶段,你很快就会发现,底层模型的完整能力,并不等于某个具体服务应该暴露给外部的能力…...
RTX3070 + CUDA 11.0 实战:手把手教你从零搭建 PointNet.pytorch 环境(附常见报错解决)
RTX3070 CUDA 11.0 实战:手把手教你从零搭建 PointNet.pytorch 环境(附常见报错解决) 当你手握一块RTX3070显卡,想要复现PointNet这一经典点云处理网络时,是否曾被环境配置的各种坑绊住脚步?本文将带你避开…...
Vivado 时序约束文件 (.xdc) 管理与维护实战指南:从单文件到团队协作
Vivado 时序约束文件 (.xdc) 管理与维护实战指南:从单文件到团队协作 在FPGA设计流程中,时序约束文件(.xdc)如同交通信号灯,为设计指明方向与规则。随着项目规模扩大和团队协作需求增加,如何高效管理这些约…...
深度解析WindowResizer:Windows窗口强制调整工具的技术架构与实现
深度解析WindowResizer:Windows窗口强制调整工具的技术架构与实现 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer WindowResizer是一款基于MFC框架开发的Windows桌面应…...
STM32duino多传感器库:X-NUCLEO-IKS01A2驱动详解
1. 项目概述STM32duino X-NUCLEO-IKS01A2 是一个面向 Arduino 兼容生态(特别是基于 STM32 的开发板,如 NUCLEO-F401RE、NUCLEO-F411RE、NUCLEO-L476RG 等)的硬件抽象库,专为驱动 STMicroelectronics 官方推出的 X-NUCLEO-IKS01A2 …...
MD500E无感观测器模型:顺逆风检测与启动功能,低速性能优越的浮点模型
MD500E无感观测器模型顺逆风检测和启动。 逆风可刹停,也可直接切入闭环运行。 低速性能良好,可零速启动,堵转不发散,可正反转切换。 提供原版论文。 电阻、电感、磁链偏差20%情况下,对观测器性能无影响。 注 本模型是M…...
