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

深入理解Java并发编程中的原子操作、volatile关键字与读写锁

1. 原子操作与AtomicInteger等原子类

1.1 原子操作的原理

在多线程环境中,多个线程可能会同时访问和修改共享资源。如果这些操作不是原子性的(即可以被中断),那么可能会导致数据不一致或竞态条件(race condition)。原子操作是指不可分割的操作,即在多线程环境下,这些操作不会被其他线程打断。

Java提供了java.util.concurrent.atomic包来支持原子操作,底层通过CPU提供的CAS(Compare-And-Swap)指令实现。CAS是一种无锁算法,它通过比较内存位置的值是否等于预期值,如果是,则更新为新值;否则,重试直到成功。

CAS的优点:

  • 避免了传统锁机制带来的阻塞问题。
  • 提高了并发性能,特别是在竞争不激烈的情况下。

CAS的缺点:

  • ABA问题:当一个变量从A变为B再变回A时,CAS会误认为没有变化。
  • 循环时间长开销大:如果CAS操作失败,需要不断重试,可能导致较高的CPU开销。

1.2 AtomicInteger类详解

AtomicInteger是Java中常用的原子类之一,它提供了一系列原子操作方法,如get()set()incrementAndGet()decrementAndGet()等。这些方法确保了在多线程环境下的线程安全性。

常用方法:

  • int get(): 获取当前值。
  • void set(int newValue): 设置为给定值。
  • int incrementAndGet(): 将当前值加1并返回新的值。
  • int decrementAndGet(): 将当前值减1并返回新的值。
  • int addAndGet(int delta): 将当前值增加指定的增量并返回新的值。
  • boolean compareAndSet(int expect, int update): 如果当前值等于预期值,则设置为新值,并返回true;否则返回false。

示例代码:

import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerExample {private static AtomicInteger counter = new AtomicInteger(0);public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.incrementAndGet();}});Thread t2 = 
http://www.lryc.cn/news/528966.html

相关文章:

  • HTML(快速入门)
  • SpringBoot Web开发(SpringMVC)
  • 汽车蓝牙钥匙定位仿真小程序
  • K8S中高级存储之PV和PVC
  • 【C语言进阶】- 动态内存管理
  • Python实现基于TD3(Twin Delayed Deep Deterministic Policy Gradient)算法来实时更新路径规划算法
  • pytorch实现半监督学习
  • 我的毕设之路:(2)系统类型的论文写法
  • LosslessScaling-学习版[steam价值30元的游戏无损放大/补帧工具]
  • concurrent.futures.Future对象详解:利用线程池与进程池实现异步操作
  • StarRocks 安装部署
  • Python Matplotlib库:从入门到精通
  • 线程概念、操作
  • 【PySide6拓展】QSoundEffect
  • 33【脚本解析语言】
  • 【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)
  • 如何解决TikTok网络不稳定的问题
  • 告别页面刷新!如何使用AJAX和FormData优化Web表单提交
  • WireShark4.4.2浏览器网络调试指南:数据统计(八)
  • Hypium+python鸿蒙原生自动化安装配置
  • 2025创业思路和方向有哪些?
  • 实验五---控制系统的稳定性分析---自动控制原理实验课
  • AttributeError: can‘t set attribute ‘lines‘
  • Day07:缓存-数据淘汰策略
  • 基于聚类与相关性分析对马来西亚房价数据进行分析
  • Java—工具类类使用
  • 游戏开发领域 - 游戏引擎 UE 与 Unity
  • [NVME] PMRCAP-Persistent Memory Region Capabilities
  • Ollama windows安装
  • vim操作简要记录