并发编程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 等多种技术和原理来实现批量处理多个异步请求,并确保所有请求都能正确处理并报告其状态。 假设有一个场景:有一个任务列表,有单个任务的处理功能…...
3分钟搞定!GetQzonehistory教你永久保存QQ空间青春回忆
3分钟搞定!GetQzonehistory教你永久保存QQ空间青春回忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心那些承载着青春记忆的QQ空间说说会消失吗?GetQzo…...
为什么你的学术论文需要APA第7版样式表?3分钟解决Word格式难题
为什么你的学术论文需要APA第7版样式表?3分钟解决Word格式难题 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 作为一名学术研究者或学生&a…...
AArch64架构SMCR_EL3寄存器详解与SME向量计算优化
1. AArch64系统寄存器与SMCR_EL3概述在Armv8-A/v9架构中,系统寄存器是处理器状态和功能控制的核心枢纽。作为特权级软件与硬件交互的接口,每个系统寄存器都承担着特定的控制、配置或状态监控职责。SMCR_EL3(SME Control Register at EL3&…...
我测了四款龙虾助手,最慢最傻的,都是最贵的
如果你现在用着某款龙虾助手觉得还行,先别急着点头—— 你可能只是还没用过真正好用的。 01 一个残酷的排行榜 过去几周,我认真用了四款 CLAW 系列的 AI 编程助手,俗称"龙虾助手":qcalw、easycalw、workbuddy、autoclaw。 结果?差距比我预想的大得多。 直接…...
云厂商AI基础设施争夺战:Bedrock、Azure AI Studio与Vertex AI深度对比
1. 项目概述:一场没有硝烟的AI基础设施争夺战你打开云厂商控制台,发现“Bedrock”“Azure AI Studio”“Vertex AI”这些名字突然变得比以前更醒目;你翻看技术团队的采购清单,GPU实例价格单旁多了一行加粗标注:“含专属…...
RAG幻觉根治手册:系统化消除检索增强生成中的错误输出
RAG 系统产生幻觉不是偶然,而是有明确的根因。本文从幻觉的成因分类入手,给出每类幻觉的系统性解决方案,帮助你把 RAG 准确率从 70% 提升到 95%。RAG 幻觉的三大根源在实践中,RAG 幻觉来自三个层面:检索层幻觉…...
终极指南:用Python AUTOSAR轻松生成ARXML文件,告别昂贵商业工具
终极指南:用Python AUTOSAR轻松生成ARXML文件,告别昂贵商业工具 【免费下载链接】autosar A set of python modules for working with AUTOSAR XML files 项目地址: https://gitcode.com/gh_mirrors/au/autosar 还在为AUTOSAR工具链的高昂费用和复…...
如何在15分钟内完成Windows系统优化和软件批量安装:WinUtil完全指南
如何在15分钟内完成Windows系统优化和软件批量安装:WinUtil完全指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否曾为新…...
如果你还在为CAD、SolidWorks的许可发愁,看看这八家
先讲个真事。上个月我一个老同事打电话来,他们公司做非标自动化,四十几个机械工程师,用的主要是SolidWorks和AutoCAD。他说每年买浮动许可的钱快三百万了,结果研发那边还是天天有人排队等许可。他去看了一眼,下午两点半…...
卡梅德生物技术快报|多肽库筛选:基于全质粒 PCR 的噬菌体文库构建与小分子表位淘选实战
正文摘要本文面向生物研发、实验技术、噬菌体展示方向开发者,系统讲解多肽库筛选完整流程:从问题分析、瓶颈定位、实验方案设计到质控与结果输出,提供可复现的技术方案与关键参数。内容基于真实学位论文研究,聚焦高库容、高多样性…...
