atomic常用类方法

四、原子操作之 AtomicReference 引用就是为对象另起一个名字,引用对象本身指向被引用对象,对引用对象的操作都会反映到被引用对象上。包中还提供了更多更细场景的原子操作类,此包下的大部分工具类都是基于 CAS 原理实现,正因为如此,有很多相似之处,用法大同小异,希望大家在日常研发中多比较多总结,早日掌握之。工具类实现生活中汽车牌照竞拍的例子:假设总共有 10 位客户参与竞拍,每位客户只有一次竞拍机会,竞拍是资格竞拍不以竞拍价格为目的。则是对普通的对象引用的封装,可将多个变量作为一个整体对象,操控多个属性的原子性的并发类。 阅读详情

Java中的java.util.concurrent.atomic包提供了多种原子操作工具类,以下是核心类及其方法:


‌1. AtomicBoolean‌

‌方法‌:

  • get():获取当前值
  • set(boolean newValue):强制设置值
  • compareAndSet(boolean expect, boolean update):CAS操作
  • getAndSet(boolean newValue):原子获取旧值并设置新值
  • lazySet(boolean newValue):最终一致性设置(不保证立即可见)

‌2. AtomicInteger/AtomicLong‌

‌方法‌:

  • get()/intValue():获取当前值
  • set(int newValue):强制设置值
  • compareAndSet(int expect, int update):CAS操作
  • getAndIncrement():原子自增(返回旧值)
  • getAndDecrement():原子自减
  • getAndAdd(int delta):原子加法
  • incrementAndGet():自增并返回新值
  • updateAndGet(IntUnaryOperator updateFunction):函数式更新

‌3. AtomicReference<V>‌

‌方法‌:

  • get():获取引用值
  • set(V newValue):强制设置引用
  • compareAndSet(V expect, V update):CAS操作
  • getAndSet(V newValue):原子交换引用
  • updateAndGet(UnaryOperator<V> updateFunction):函数式更新引用

‌4. AtomicIntegerArray/AtomicLongArray‌

‌方法‌:

  • length():数组长度
  • get(int i):获取下标i的值
  • set(int i, int newValue):设置指定下标值
  • compareAndSet(int i, int expect, int update):CAS操作指定元素
  • getAndIncrement(int i):原子自增数组元素

‌5. AtomicStampedReference<V>‌

‌方法‌:

  • getReference():获取引用值
  • getStamp():获取版本戳
  • compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp):带版本戳的CAS

‌6. AtomicMarkableReference<V>‌

‌方法‌:

  • isMarked():获取标记状态
  • compareAndSet(V expectedReference, V newReference, boolean expectedMark, boolean newMark):带标记位的CAS

‌7. LongAdder/DoubleAdder(高并发统计场景)‌

‌方法‌:

  • add(long x):累加值
  • sum():返回总和(非原子)
  • reset():重置计数器

‌特点总结‌:

  1. ‌线程安全‌:所有操作均为原子性
  2. ‌无锁设计‌:基于CAS实现高性能并发
  3. ‌内存语义‌:遵循volatile的可见性和有序性
  4. ‌函数式支持‌:JDK8+提供updateAndGet等函数式方法

适用于计数器、状态标志、对象引用更新等场景。

rk3568_atomic 本文记录的是正点原子rk3568开发板的atomic实验提示:以下是本篇文章正文内容,下面案例可供参考例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。原子操作避免了 全局变量被其他线程修改的情况。 阅读详情

相关推荐

Java并发编程(21)—— Atomic 原子类总结

第一步,因为对象的属性修改类型原子类都是抽象类,所以每次使用都必须使用静态方法 newUpdater()创建一个更新器,并且需要设置想要更新的类和属性。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。基本类型原子类只能更新一个变量,如果需要原子更新多个变量,需要使用 引用类型原子类。

shangjg3的博客 264

Java中的get和set的用法_Java AtomicReference getAndSet()用法及代码示例

AtomicReference类的getAndSet()方法用于以原子方式将AtomicReference对象的值设置为newValue,该值作为参数传递并返回AtomicReference对象的旧值,并具有由VarHandle.getAndSet(java.lang.Object ... ).VarHandle.getAndSet(java.lang.Object…)指定将变量作为设置的内存语义...

weixin_39769703的博客 1798

C++11多线程(三):atomic与atomic_flag的使用与原理分析

C++11提供了线程的原子操作,这些在boost库中也有,在多个线程时原子操作保证了数据的安全性。C++11的原子操作主要是atomic和atomic_flag,使用时需要包含如下头文件: #include<atomic> 一.atmoic类的使用 template<>struct atomic<_ITYPE> ,...

琅嬛福地 4378

JDK源码——Atomic包(三)

允许你原子地更新一个引用类型的变量。这意味着在多线程环境下,你可以安全地更新这个引用,而不会导致不一致或者竞态条件的问题。它通常用于实现简单的并发数据结构,如原子计数器、状态标志等。是一个泛型类,用于实现一个线程安全的引用类型。

庄的博客 1376

基于Python爬虫的新闻热点分析与挖掘

本文介绍了基于Python爬虫的新闻热点分析与挖掘方法,主要包括数据收集、预处理、热点分析和可视化四个部分。首先通过爬虫抓取新浪新闻数据,利用文本清洗和存储技术进行数据预处理;接着采用TF-IDF和LDA算法进行关键词提取与主题建模;最后通过词云图和主题分布图实现数据可视化。该方法能有效识别新闻热点,为信息筛选和决策提供支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1544

用Python 绘制一个只属于你自己的世界地图

Python之所以这么流行,是因为它不仅能够应用于科技领域,还能用来做许多其他学科的研究工具,绘制地图便是其功能之一。 今天我们用matplot工具包之一的mpl_toolkits来绘制世界地图,这是一个简单的可视化工具,如果希望绘制更加复杂的地图,可以考虑使用Google Maps API,不过这不在我们今天的讨论范围之内。 1.安装 为了能够顺利开展本项目,你需要先安装以下依赖,在cmd或Terminal中输入以下命令: pipinstallnumpy pipinstallm...

qq_38887171的博客 1870

java:AtomicReference使用

AtomicReference源码可知,本质是使用CAS方法+自旋更新引用对象value(AtomicReference是泛型类,V value代表引用对象),如getAndUpdate、updateAndGet、getAndAccumulate、accumulateAndGet方法。因为CAS利用CPU指令保证了操作的原子性(更新安全可靠),达到了锁的效果,而自旋则是采用循环的方式尝试获取锁,当线程发现锁被占用,会循环判断锁状态,直至获取锁。

a232884c的博客 5398

三菱PLC通信库大比拼:手把手教你用C#实现最高效的McProtocol数据读写

本文深入比较了三菱PLC通信库的性能,重点介绍了如何使用C#高效实现McProtocol数据读写。通过实测数据对比HslCommunication、McProtocol-next和自定义方案的优劣,提供优化技巧和代码示例,帮助开发者在工业自动化场景中提升通信效率。

m0n1o2p的博客 255

AtomicReference详解

在开发中突然看到这个类,就学习了以下AtomicReference,希望可以帮到你

不定期更新Java相关的各种内容 1万+

ads设计Doherty功放(1)

Doherty功放的设计

qq_40995480的博客 2万+

速腾16线激光雷达(RS-16)在ubuntu18.04系统下跑SC-A-LOAM算法

说明: 简要记录一下速腾16线激光雷达即RS-16在ubuntu18.04系统下跑SC-A-LOAM算法的过程,因为SC-A-LOAM算法源码不支持RS雷达的数据,大致思想就是先将rs雷达发布的激光数据转换为velodyne类型的数据,考虑到接下来还要基于RS-16实时运行SC-A-LOAM算法,这里提前将RS_SDK驱动安装好。 1 搭建SC-A-LOAM算法运行环境 首先需要在电脑上搭建SC-A-LOAM算法的运行环境,见文章《ubuntu18.04搭建SC-A-LOAM环境并运行》 本文所使用的系统架

超爱吃小蛋糕的66的博客 2373

java.util.concurrent.atomic包的常用类

java.util.concurrent.atomic包主要的常用类包括:AtomicBoolean、AtomicInteger、AtomicLong等。该工具包支持在单个变量上解除锁定的线程安全编程。   1、AtomicBoolean的常用方法 AtomicBoolean b = new AtomicBoolean(false); b.compareAndSet(false, t...

程序员的天堂 225

16、天文时间序列分类:基于人工神经网络的研究

本研究探讨了基于人工神经网络的天文时间序列分类方法,重点比较了MLP、LSTM和CNN等模型在BRITE和开普勒K2数据集上的表现。研究发现LSTM不适用于此类数据,而结合特征提取与PSO超参数优化的多层感知器(MLP)在开普勒K2数据上实现了98.55%的二分类准确率。通过精细的数据预处理和高置信度样本选择,显著提升了分类性能。研究成果为恒星变异性识别提供了高效工具,并对天文学与机器学习交叉领域具有重要参考价值。

pz8901234的博客 112

Atomic原子类常用方法总结(包含四大类型)

学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、优快云 技术博客 3 篇

时光如白驹过隙的博客 6496

OpenClaw界面操作手册:命令行与交互模式的正确打开方式

"test": {"description": "运行项目的测试套件","prompt": "请执行项目的测试命令,并分析测试结果。如果有失败的测试,请提供修复建议。},"lint": {"description": "运行代码检查","prompt": "请运行代码检查工具,分析所有警告和错误,并提供修复建议。},"doc": {"description": "为当前文件生成文档","prompt": "请为当前打开的文件生成完整的API文档,包括函数说明、参数描述、返回值类型和使用示例。

gaoxiang_120的专栏 3146

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【C++11并发】Atomic 笔记

atomic相关操作

A_cainiao_A 1562

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

muduo之Atomic

Atomic是muduo原子操作的实现类。 Atomic.h // Use of this source code is governed by a BSD-style license // that can be found in the License file. // // Author: Shuo Chen (chenshuo at chenshuo dot com...

1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【C++】atomic原子操作

C++中原子变量(atomic)是一种多线程编程中常用的同步机制,它能够确保对共享变量的操作在执行时不会被其他线程的操作干扰,从而避免竞态条件(race condition)和死锁(deadlock)等问题。C++11起提供了atomic,可以使用它定义一个原子类型。

qq_60755751的博客 2440

Linux原子操作 atomic_cmpxchg()/Atomic_read()/Atomic_set()/Atomic_add()/Atomic_sub()

所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位。因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实

兰宝的专栏 4965

Atomic原子类常用方法总结

最近项目中经常用到Atomic原子类,撰写此贴以记录 说明: 在JDK1.5版本之前,多行代码的原子性主要通过synchronized关键字进行保证。 在JDK1.5版本,Java提供了原子类型专门确保变量操作的原子性 原子类型位于java.util.concurrent.atomic包下,其主要类如下: 首先,以AtomicInteger类源码为例简要说明Atomic原子类为什么是线程安全的 // setup to use Unsafe.compareAndSwapInt for updat.

banjing_1993的博客 1117

原子操作__atomic_store and __atomic_load

链接:https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html https://blog.youkuaiyun.com/weixin_36145588/article/details/73847365 http://www.verydoc.net/c/00000145.html 原子操作在多线程开发中经常用到,比如在计数器,序列产生器等地方,这类情况下数据有并发的危险,但是用锁去保护又显得有些浪费,所以原子类型操作十分的方便。 原子操作虽

phone1126的专栏 1万+

轻松解决msvcp140_ATOMIC_WAIT.dll丢失问题的5种方法

在电脑使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140_ATOMIC_WAIT.dll丢失”。这个错误提示通常出现在运行某些程序或游戏时,给使用者带来了很大的困扰。那么,如何解决这个问题呢?小编将为大家介绍5种解决方法,帮助大家轻松解决msvcp140_ATOMIC_WAIT.dll丢失的问题。msvcp140_ATOMIC_WAIT.dll是Microsoft Visual C++ 2015运行时库的一部分,是一个动态链接库(DLL)文件。

2301_77698200的博客 1万+

C++11 atomic

C++11 atomic库介绍

羊羊羊 1006

Volatile vs Atomic

volatile和atomic这两个关键字经常会出现在我们的视线中。它们虽然看似相似,实则功能大不相同。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6108

linux 原子性操作atomic_t

在任何处理器平台下,都会有一些原子性操作,供操作系统使用,我们这里只讲x86下面的。在单处理器情况下,每条指令的执行都是原子性的,但在多处理器情况下,只有那些单独的读操作或写操作才是原子性的。为了弥补这一缺点,x86提供了附加的lock前缀,使带lock前缀的读修改写指令也能原子性执行。带lock前缀的指令在操作时会锁住总线,使自身的执行即使在多处理器间也是原子性执行的。xchg指令不带lock前

晴天的专栏 5225
上一篇: Arthas单独记录篇
下一篇: Caffeine介绍
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值