java AtomicInteger、AtomicLong原理分析及测试实例

人工智能入门系列之一: 鸢尾花(Iris)多分类的神经网络详解及代码实现 这是最好的时代,我们一起来打造属于自动驾驶汽车上路、无人机飞天、智能机器人管工厂的AI未来 人工智能领域分化为两个阵营:其一是规则式(rule-based)方法,在人工智能早期占主峰;其二是神经网络(neural network)方法,后起之秀。随着硬件水平的提高,算力的指数式增长;人工智能的重心已经从规则式的专家时代转移到神经网络的数据时代。 “神经网络”不选择把人脑熟稔的逻辑规则传授给计算机... 阅读详情

  AtomicInteger、AtomicLong可以理解为乐观锁,它们认为变量值是不会改变,等去设置值的时候去确认。这种方式适用于该变量值很少更改的情况下,否则性能适得其反。


  CAS(乐观锁算法)的基本假设前提


                   CAS比较与交换的伪代码可以表示为:


                 do{   
                       备份旧数据;  
                     基于旧数据构造新数据;  
               }while(!CAS( 内存地址,备份的旧数据,新数据 ))  


下面写了个多线程的例子:

package com.zc.thread;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * Created by Administrator on 2017/5/17.
 */
public class CountTest {

    public static void main(String[] args) {
             CountThread countThread = new CountThread();
            for(int i = 0 ; i < 5 ; i ++){
                new Thread(countThread).start();
            }
    }

     static class   CountThread implements   Runnable{
        private AtomicInteger atomicInteger = new AtomicInteger(0);
        @Override
        public void run() {
            setAtomicValue(atomicInteger.get()+1);
        }
        public void  setAtomicValue(int newValue){
            boolean flag = false;
            do {
                int oldValue =  atomicInteger.get();
                System.out.println("当前线程:"+Thread.currentThread().getName()+",旧的值:"+oldValue+",新的值:"+newValue);
                flag = atomicInteger.compareAndSet(oldValue, newValue);
                System.out.println("当前线程:"+Thread.currentThread().getName()+",原子的值设置结果:"+flag);
            }while (!flag);
        }
    }
}
运行结果


发现红色圈的区域了吧,由于多线程,导致  Thread-3的线程将值设为1的时候失败,原因是0已经被Thread-0的线程设置为1了。所以Thread-3的线程设置失败,最后循环重新取出了最新的值1,然后Thread-3将值继续设置为1,返回true。

正负数据如何归一化_生信干货 | LC-MS代谢组学QI软件下机数据代谢物筛选和归一化如何做?... 上海·2019第一届多层组学前言技术发展华东区客户研讨会倒计时1天LC-MS非靶向代谢组学数据下机啦~~拿到一堆数据怎么办?不会高端代码,也不会自己写脚本,我怎么处理数据?​本期小编带来了LC-MS非靶向代谢组学下机数据处理实用干货,包括:下机定性结果表格的解析、代谢物筛选如何做?以及定量数据如何做归一化?实用干货,赶紧来抢~~话不多说,赶紧来学习吧~~非靶向LC-MS代谢组学的分析流程LC-MS... 阅读详情

相关推荐

Kali Linux实战:用Impacket的secretsdump.py快速提取Windows域控哈希(附避坑指南)

本文详细介绍了如何在Kali Linux中使用Impacket的secretsdump.py脚本快速提取Windows域控哈希,包括环境准备、原理剖析、实战操作及常见问题解决方案。特别适合CTF竞赛和网络信息安全爱好者学习,提升渗透测试效率。

weixin_33670786的博客 410

jdk8 新增原子操作类----------LongAdder

AtomicLong 通过CAS 提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能己经很好了,但是JDK 开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同→个原子变量,但是由于同时只有一个线程的CAS 操作会成功,这就造成了大量线程竞争失败后,会通过无限循环不断进行自旋尝试CAS 的操作, 而这会白白浪费CPU 资源。 因此JDK 8 新增了一...

y471519146的博客 255

Win11下WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文提供了一份详细的Win11下WSL2安装Ubuntu22.04的实战避坑指南。内容涵盖从WSL2核心安装、自定义安装路径,到更换国内镜像源以解决更新缓慢问题,并一站式配置完整的C++开发环境(包括GCC、CMake、vcpkg等),最后分享提升开发体验的进阶技巧,助你在Windows上打造高效的Linux开发工作站。

weixin_29260291的博客 562

AtomicLong简介及其用法

AtomicLong是java并发包(java.util.concurrent.atomic)中的一个类,用于在多线程环境下对long类型变量进行原子操作。boolean compareAndSet(long expect ,long update): 如果当前值等于expect,则更新为update,成功返回true。long getAndSet(long newValue): 获取当前值并设置新值。long getAndAdd(long delta): 获取当前值并加上delta。

xwh_123456的博客 1900

STM32F407编译下载全流程:从CubeMX到HEX烧录

嵌入式固件开发中,编译与下载是连接代码与硬件的关键闭环。其本质是将高级语言描述的逻辑,经交叉编译(ARM GCC)、链接(ELF生成)、格式转换(HEX/BIN)后,通过调试接口(SWD/UART)写入MCU Flash存储器的过程。该流程涉及工具链协同、二进制格式特性(如Intel HEX的地址映射与无元数据设计)、启动模式(System Memory Bootloader)、Flash选项字节(RDP/WRP)等底层机制,直接决定固件可运行性与安全性。典型应用场景包括STM32F407开发板调试、量产固

weixin_28840811的博客 260

ECU-TEST新手入门:从软件申请到第一个测试包创建的完整保姆级流程

本文详细介绍了ECU-TEST软件从申请试用、安装配置到创建第一个测试包的完整流程。针对新手用户,提供分步指导,包括界面认知、测试组件添加、变量定义及执行结果分析,帮助快速掌握汽车电子测试工具的基本操作。特别说明试用授权的两种获取方式和安装注意事项。

weixin_30606461的博客 481

AtomicLong和LongAdder的区别

并发场景下的number操作,都会选用java.util.concurrent.atomic包下的数据结构,比如典型的计数场景,而AtomicLong是其中一个,但是jdk1.8后Doug Lea大神又添加LongAdder和DoubleAdder,在大并发场景下性能会远高于AtomicLong,看下源码了解下原理。 首先看下AtomicLong是怎么保证原子操作,以add操作,拿其中 addAn...

肆頭的博客 1652

【Cadence】PSS+PSTB/PAC仿真在开关电源稳定性分析中的关键应用

本文深入探讨了Cadence仿真工具中PSS+PSTB/PAC方法在开关电源稳定性分析中的关键应用。针对开关电源作为时变非线性系统的特性,传统STB仿真方法会失效。文章详细阐述了如何通过PSS分析找到周期稳态,并在此基础上利用PSTB或PAC进行精确的环路增益和小信号频响分析,为电源设计提供可靠的稳定性评估与补偿网络设计依据。

weixin_29276847的博客 528

AtomicLong的原理

AtomicLong定义 在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型 所以平常用long的时候,多线程重复操作同一个long类型数据时,结果会不准确 AtomicLong相当于Synchrnized的long。 类结构: public class Atom...

qq_32844875的博客 2370

Langfuse落地教程:从Docker部署到项目接入,掌控LLM调用链路

大模型应用开发中,调用链路的透明度直接决定调试效率与成本控制。可观测性技术通过记录每次请求的输入、输出、模型参数与Token消耗,帮助开发者快速定位问题。Langfuse作为开源LLM可观测性平台,将Trace、Prompt版本管理、评分等能力集成于一体,支持Docker Compose自托管部署,并提供Python/JS SDK与REST API。借助部署后的控制台,团队能够直观追踪RAG检索、Agent工具调用等复杂流程中的每一步耗时与资源占用,实现从黑盒调用到全链路可视化的转变。无论是本地调试、线上排

weixin_29698641的博客 309

Camera(5)metadata

Metadata 是整个 Android camera 中类似于高楼大厦中的管道系统一样,贯穿了整个 Camera 的 Framework 和 vendor HAL。Metadata 里面包含了所有的控制、参数、返回值等等。Metadata分为Android原生的Metadata和芯片商或者用户自定义的Metadata,即Android Tag和Vendor Tag。Vendor Tag在Hal中定义,并在camx和chi目录中使用。

qq_55893245的博客 3056

java AtomicLong原理解析

【转+原创】 AtomicLong原理解析 一 锁的机制 自从1.5后引入了Atomic+数据类型的类,具体在package java.util.concurrent.atomic包中,通过包名concurrent可以猜到,这个是线程安全的,既然线程安全可以用synchronized来解决,为什么还需要这些类呢? 乐观锁与悲观锁 独占锁是一种悲观锁,synchronized就是一种独占锁,它假设...

chuxue1989的专栏 1249

S4-FPGA-K7板级原理图硬件实战

xilinx K7板级硬件实战

weixin_66510961的博客 6154

原子操作类AtomicInteger详解

为什么需要AtomicInteger原子操作类? 对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的。num++解析为num=num+1,明显,这个操作不具备原子性,多线程并发共享这个变量时必然会出现问题。测试代码如下: public class AtomicIntegerTest { private static final int...

分享传递价值 22万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

原子变量操作类AtomicLong详解

JUC并发包中有AtomicInteger、AtomicIntegerArray、AtomicLong、AtomicBoolean等原子变量操作类,他们原理都类似,本文主要分析为什么需要原子操作类以及AtomicLong类的实现原理。

零点悟的博客 1314

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java AtomicInteger原子操作类

AtomicInteger类是属于java.util.concurrent.atomic的包,在此包下还有AtomicBoolean,AtomicInteger,AtomicLong等进行原子操作的类,主要是运用于在高并发环境下,多线程的安全操作。 读了第一点,我们需要搞清楚这几个问题。 1.什么是线程安全? 2.什么是原子操作? 2.1.1 什么是线程安全? 线程安全的定义是当多个线程...

搏·梦的博客 320

AtomIcinteger类与cas

为什么需要AtomicInteger原子操作类? AtomicInteger位于java.util.concurrent.atomic包下,是对int的封装,提供原子性的访问和更新操作,其原子性操作的实现是基于CAS。 CAS(compare-and-swap)直译即比较并交换, 提供原子化的读改写能力,是Java 并发中所谓 lock-free 机制的基础。 CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则

qq_53066866的博客 483

AtomicInteger

AtomicInteger是java.util.concurrent.atomic包下面的原子操作类,可以用原子方式更新int值。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个其它线程进入。 示例代码: import java.util.concurrent.CountDownLatch; import java.uti

北辰 228

AtomicInteger原理

AtomicInteger的原理 java的并发原子包里面提供了很多可以进行原子操作的类,比如: AtomicInteger AtomicBoolean AtomicLong AtomicReference 等等,一共分为四类:原子更新基本类型(3个)、原子更新数组、原子更新引用和原子更新属性(字段)。、提供这些原子类的目的就是为了解...

weixin_34280237的博客 239

多线程与高并发(三):JUC包下新的同步机制:CAS,AtomicInteger,AtomicLong,ReentrantLock,CountDownLatch,ReadWriteLock等

CAS CAS 是一种乐观锁,syncronized 是一种悲观锁 AtomicInteger AtomicInteger count = new AtomicInteger(0); /*synchronized*/ void m() { // 多个线程调用m时,就不需要手动加锁了 for (int i = 0; i < 10000; i++) //if count1.get() < 1000 count.incrementAndGet(); //count1++ }

寒泉 6万+

Java中常用的原子类

文章目录一、什么是原子类二、原子类的底层实现三、常用的原子类3.1、AtomicInteger与AtomicLong3.2、LongAdder四、原子类的性能测试4.1、测试程序4.2、测试结果4.3、结果分析4.4、底层实现分析 一、什么是原子类 Java中提供了一些原子类,原子类包装了一个变量,并且提供了一系列对变量进行原子性操作的方法。我们在多线程环境下对这些原子类进行操作时,不需要加锁,大大简化了并发编程的开发。 二、原子类的底层实现 目前Java中提供的原子类大部分底层使用了CAS锁(Compar

weixin_43364551的博客 7593

线程安全-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

原子操作类 AtomicInteger

转载地址:https://blog.youkuaiyun.com/fanrenxiang/article/details/80623884 为什么需要AtomicInteger原子操作类? 对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的。num++解析为num=num+1,明显,这个操作不具备原子性,多线程并发共享这个变量时必然会出现问题。测试代码如下: ...

A tortoise running wild 276

java 原子类

Java 并发包中的原子类都是基于无锁方案实现的(CAS),相较于传统的互斥锁,无锁并没有加锁、解锁、线程切换的消耗,因此无锁解决方案的性能更好,同时无锁还能够保证线程安全。 java原子类预览 AtomicInteger 示例 package com.zhang.myjuc.a4.atomic; import java.util.concurrent.atomic.AtomicInteger; /** * AtomicIntegerDemo:演示AtomicInteger的基本用法,对比

长草颜团子 6847

比AtomicLong更高效的并发计数器

我喜欢新鲜玩意儿,而Java 8里面就有不少。这回我准备介绍一下我的一个最爱——并发计数器。这是一组新的类,用于维护多个线程并发读写的计数器。新的API带来了显著的性能提升,同时还保证了接口的简单易用。 多核时代来临了之后,大家都开始使用并发计数器,我们先来看一下Java迄今为止提供了哪些实现方式,它们的性能和这个新的API相比,又有什么不同。 脏计数器——选择这种方式意味着多线程直接并发读写一个...

ScutKevinYzy的博客 366
上一篇: 利用jdk1.8写个模板方法模式的例子
下一篇: Hbase1.2.0以后 JavaAPI最新接口调用方法
yufei_java
博客等级 码龄10年 18粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值