线程安全的AtomicLong使用

国产系统(统信 UOS )漏洞修复方式 2.1 服务器版(单漏洞更新):服务器标准版:yum upgrade-minimal --cve “CVE编号”服务器 D 版:sudo apt update&&sudo apt install “受影响的软件包”1 统信 UOS 漏洞修复方式在线升级修复桌面专业版:通过以下步骤打开在线升级:控制中心–>更新–>更新设置–>打开系统更新、安全更新。安装过程中,请勾选“我已阅读并知晓”,然后点击“开始升级”。2 点击“检查更新”–“全部下载”,如果不想进行系统更新,可以选择只下载“安全更新”。 阅读详情

线程安全的AtomicLong使用

原创  2014年01月01日 21:24:06

看一个计数的类:

[java]  view plain  copy
  1.   
[java]  view plain  copy
  1. public class Counter {  
  2.     private static long counter = 0;  
  3.     public static long addOne(){  
  4.         return ++counter;  
  5.     }  
  6. }  

初看感觉没啥问题,但这个类在多线程的环境下就会有问题了。

假如开多个线程都来使用这个计数类,它会表现的“不稳定”

[java]  view plain  copy
  1. public static void main(String[] args) {  
  2.     for(int i=0;i<100;i++){  
  3.         Thread thread = new Thread(){  
  4.             @Override  
  5.             public void run() {  
  6.                 try {  
  7.                     Thread.sleep(100);  
  8.                     if(Counter.addOne() == 100){  
  9.                         System.out.println("counter = 100");  
  10.                     }  
  11.                 } catch (InterruptedException e) {  
  12.                     e.printStackTrace();  
  13.                 }  
  14.             }  
  15.         };  
  16.         thread.start();  
  17.     }  
  18. }  

程序会开100个线程,每个线程都会把counter 加一。那么应该有一个线程拿到counter =100的值,但实际运行情况是大多数据情况下拿不到100,在少数情况能拿到100.

因为 Counter 类在 addOne()方法被调用时,并不能保证线程的安全,即它不是原子级别的运行性,而是分多个步骤的,打个比方:

线程1首先取到counter 值,比如为10,然后它准备加1,这时候被线程2占用了cpu,它取到counter为10,然后加了1,得到了11。这时线程1 又拿到了CPU资源,继续它的步骤,加1为11,然后也得到了11。这就有问题了。

那么怎么解决它呢?JDK在concurrent包里提供了一些线程安全的基本数据类型的实现,比如 Long型对应的concurrent包的类是AtomicLong。

现在修改下代码:

[java]  view plain  copy
  1. import java.util.concurrent.atomic.AtomicLong;  
  2.   
  3.   
  4. public class Counter {  
  5.     private static AtomicLong counter = new AtomicLong(0);  
  6.   
  7.   
  8.     public static long addOne() {  
  9.         return counter.incrementAndGet();  
  10.     }  
  11. }  


运行了多次,结果都是能输出counter = 100。


所以在多线程环境下,可以简单使用AtomicXXX 使代码变得线程安全。

转载请注明出处:http://blog.youkuaiyun.com/yaqingwa/article/details/17737771

版权声明:本文为博主原创文章,未经博主允许不得转载。
最新腾讯手游游戏appid列表及urlScheme一览 urlscheme查询 [全网独家] 2024最新腾讯游戏appid列表及urlScheme一览 手游包含王者荣耀QQ飞车我的世界PUBG吃鸡和平精英金铲铲之战三角洲行动QQ炫舞拳皇98OL欢乐斗地主 元梦之星使命召唤等 阅读详情

相关推荐

IAR链接器配置文件(.icf)实战指南:从内存映射到代码布局

本文深入解析了IAR链接器配置文件(.icf)的核心作用与实战配置方法。作为嵌入式开发的“内存地图”,.icf文件精确控制代码与数据在Flash和RAM中的布局。文章从定义存储空间、划分区域、预留栈堆,到精确放置中断向量表、代码段及初始化控制,提供了完整的配置指南与避坑技巧,帮助开发者优化内存使用,解决链接错误,是掌握嵌入式系统底层内存管理的关键。

fun88的博客 918

线程安全性详解(原子性、可见性、有序性)(1)

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!【完整版领取方式在文末!!

m0_57502067的博客 696

2025东方财富笔试考什么?cata能力测评攻略|答题技巧真题分享

4月10日-4月20日 专业笔试(行测+金融知识混合双打) 4月25日-5月10日 面试车轮战(AI面+半结构化+压力面) 5月15日起 Offer发放(谈薪必杀技:对标同花顺/雪球)这里不仅是金融极客的乐园,更是**“年薪30万管培生计划”**的主战场——你将用代码重构K线,用算法预判市场,成为资本市场的“数字先知”。东方财富,中国金融信息服务领域的“隐形冠军”,以**“金融数据+互联网”双擎驱动**,打造了覆盖证券、基金、期货的全生态交易平台。:• “我总坚持自己的方案”(HR:团队毒药!

Dgntsj的博客 3262

线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)

线程安全性 当多线程访问某个类时,不管运行环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何的同步或者协同,这个类都能表现出正确的行为,那么这个类就是线程安全的. 原子性 提供互斥访问,同一时刻只有一个线程对它进行访问. Atomic包 位于java.util.concurrent.atomic,AtomicXXX : CAS、Unsafe.compareAndSwapXXX CAS(Compare and swap)比较和替换是设计并发算法用的的一项技术,比较和替换是

Linux,Java,SpringBoot,Python,Lua略知一点 919

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1624

Chatbox使用指南

Chatbox使用指南

weixin_65289420的博客 2万+

线程安全性(一) 原子性 AtomicLong & LongAdder

LongAdder相对于AtomicLong的优势 LongAdder用到了热点数据分离技术,即对long型共享变量拆分成数组,多线程分别针对数组中的一段进行读写,最后再将数组合并long型共享变量; LongAdder 缺点 并发更新的时候可能导致数据出现误差; AtomicLong 示例 import com.example.concurren...

乌鲁木齐001号程序员 739

python-调用动态链接库dll/so的方法

使用python ctyeps CDLL来调用linux下的so动态链接库或windows下的dll动态链接库

XIAOXIANG233233的博客 3662

并发安全的计数统计类:AtomicLong和LongAdder

文章目录AtomicLong概述AtomicLong实现原理AtomicLong的缺陷LongAdderLongAdder实现原理LongAdder源码分析AtomicLong和 LongAdder对比代码测试 AtomicLong 概述 我们在进行计数统计的时,通常会使用AtomicLong来实现,AtomicLong能保证并发情况下计数的准确性,其内部通过CAS来解决并发安全性的问题。 AtomicLong实现原理 说到线程安全的计数统计工具类,肯定少不了Atomic下的几个原子类。AtomicLong

1294

东方财富个股实时行情爬虫实战:从入门到精通,手把手教你构建股票数据采集系统

在量化投资、股市分析和数据挖掘等领域,获取实时、准确的股票行情数据是第一步也是至关重要的一步。东方财富网作为国内最大的财经门户网站之一,提供了丰富的股票数据和实时行情接口。本文将带你从零开始,构建一个完整的东方财富个股实时行情爬虫系统,涵盖股票代码遍历、JSON接口分析、反爬虫策略应对、数据持久化存储等核心技术点。目录前言一、项目背景与目标1.1 为什么要爬取东方财富数据?1.2 项目目标1.3 技术栈二、接口分析与逆向工程2.1 寻找真实数据接口2.2 简化接口2.3 字段含义对照表三、股票代码获取。

2201_76125261的博客 146

手把手教你学Simulink——基于通信协议与标准的场景实例:卫星通信中的网络安全协议(IPSec)仿真

随着卫星通信在国防、金融、应急指挥、能源管网等关键领域的广泛应用,其安全性已成为系统设计的核心要求。然而,卫星链路具有广播特性、长距离传输、地面站分布广等特点,极易遭受窃听、篡改、重放、中间人攻击等网络威胁。传统的“信任链路层安全”已不足以应对现代网络攻击。为此,国际标准组织(如IETF、ETSI、CCSDS)推荐在卫星通信中部署协议,实现端到端的数据机密性、完整性、身份认证和抗重放保护。本文将手把手教你如何在中构建一个符合标准的仿真系统,涵盖从明文传输到加密隧道的完整安全链路建模。本文完整实现了。

MHD0815的博客 149

线程安全计算 AtomicLong

一般如果我们自己写一个计数器方法,需要考虑线程安全问题,尤其高并发访问的时候。 AtomicLong 已处理并发问题,直接使用。java.util.concurrent.atomic包提供多种线程安全计数器 import java.util.concurrent.atomic.AtomicLong; public class Counter { ...

ann49988的博客 198

14、改进的目标检测与图像去模糊算法研究

本文研究了改进的目标检测与图像去模糊算法。改进的YOLOv5s算法在目标检测中通过添加PSA模块和VoVGSCSP结构,在轻量化模型的同时提高了检测的准确性和速度,适用于电力操作安全穿戴设备检测等场景。XT-GAN结合Transformer和生成对抗网络,在图像去模糊任务中有效解决了传统方法的不足,具有更低的计算复杂度和良好的鲁棒性。两种算法为计算机视觉领域的相关任务提供了更高效、准确的解决方案。

c7d8e的博客 215

java并发测试:线程安全与线程不安全,使用AtomicLong和LongAdder演示代码保证线程安全

1.使用基础变量int(线程不安全) package com.zr.concurrency.test; import com.zr.concurrency.annotation.ThreadNotSafe; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDownLatch; import java.util...

liangruilz的博客 1289

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

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

分享个java线程安全,自增主键id的类AtomicLong

线程安全 自增的类 AtomicLong seq = new AtomicLong(0); seq.incrementAndGet()

过天的专栏 4413

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java 线程安全Long_【Java】线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)

线程安全性原子性Atomic包案例package com.keytech.task;import java.util.concurrent.Executor;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;i...

weixin_35315019的博客 302

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java 线程安全Long,Java-在下面的代码中java并发包里的AtomicLong为何不是线程安全的?...

大家都说AtomicLong是线程安全的,以下的代码预期输出500,可为什么实际执行时有时输出498、496?是不是我的理解有问题导致哪个地方写错了?环境:windows XP sp3,jdk1.6.0_27import java.util.concurrent.atomic.AtomicLong;public class TestAtomicLong {private final AtomicL...

weixin_42332123的博客 326

线程安全-AtomicLong与LongAdder

使用AtomicLong的代码与AtomicInteger一样package com.mmall.concurrency.example.atomic; import com.mmall.concurrency.annoations.ThreadSafe; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDo...

friends99的博客 1164

gs-rest-service进阶:AtomicLong计数器实现与线程安全最佳实践

在构建RESTful Web服务时,线程安全是确保服务稳定性和数据一致性的关键因素。本文将深入探讨如何在Spring框架中使用`AtomicLong`实现高效线程安全的计数器,并分享在`gs-rest-service`项目中的最佳实践。通过本文的学习,你将掌握在高并发场景下保证计数器准确性的核心方法,为你的Spring应用添加可靠的计数功能。 ## 为什么选择AtomicLong? 在多线程环

gitblog_00023的博客 453
上一篇: java.util.Random.nextBoolean()方法实例
下一篇: 通过Callable接口实现多线程
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值