CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数

2023-11-18

原子计数可以直接使用AtomicInteger
下面采用AtomicStampedReference的版本号控制原子操作解决ABA问题
最终结果一定最大的是200000
1A->2B->3A

public class AtomicReferenceMain {
    static volatile int  i=0;
    private static AtomicStampedReference<Integer> asr=new AtomicStampedReference<>(i,1);
    public static void main(String[] args) throws InterruptedException {
        AtomicInteger a=new AtomicInteger(0);
        MyRunnable mr=new MyRunnable();
        List<Thread> list=new ArrayList<>(20);
        for (int j=0;j<20;j++){
            list.add(new Thread(mr));
        }
        for (Thread thread : list) {
            thread.start();
        }
    }
    private static class MyRunnable implements Runnable{
        @Override
        public void run() {
            for (int j=0;j<10000;j++){
                for (;;){
                //参数:期望值,新值,期望版本号,新版本号
                    boolean b = asr.compareAndSet(asr.getReference(), asr.getReference()+1, asr.getStamp(), asr.getStamp() + 1);
                    if(b){
                        break;
                    }
                }
            }
            System.out.println(asr.getReference());
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数 的相关文章

随机推荐

  • MySQL基础篇:sql_mode配置

    文章目录 零 简介 一 sql mode常用来解决的几类问题 二 sql mode包含的模式 三 sql mode各个选项作用示例 3 1 sql mode为空 对于不符合定义的值 会截断到符合定义类型 3 2 sql mode为ANSI
  • 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏 附完整源码 上图 写在前面 技术源于分享 所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习 java确实不适合写桌面应用 这里只是通过这个游戏让大家理解oop面向对象编程的过程
  • 【React】路由(详解)

    目录 单页应用程序 SPA 路由 前端路由 后端路由 路由的基本使用 使用步骤 常用组件说明 BrowserRouter和HashRouter的区别 路由的执行过程 默认路由 精确匹配 Switch的使用 重定向路由 嵌套路由 向路由组件传
  • 计算机网络体系结构 - 运输层

    一 运输层协议概述 运输层为应用进程之间提供端到端的逻辑通信 二 运输层的端口 端口 port 也称为协议端口号 protocol port number 对上层的应用进程进行标识 端口用一个16位端口号进行标志 端口号只具有本地意义 端口
  • 剑指offer-输出字符串所有种类的排列组合

    常规题 先校验长度 不符合则直接输出 符合则判断是否为最后一个字符 是则直接new对象输出 不是则交换begin和i位置的数字 再用递归输出 public class Test28 先校验 public static void permut
  • 笔试

    文章目录 前言 40 复位电路设计 1 recovery time和removal time 2 同步复位和异步复位 3 异步复位同步释放 本文参考 往期精彩 前言 嗨 今天来学习复位电路设计相关问题 微信关注 FPGA学习者 获取更多精彩
  • cec2017(python):红狐优化算法(Red fox optimization,RFO)求解cec2017

    一 红狐优化算法 红狐优化算法 Red fox optimization RFO 由Dawid Po ap和 Marcin Wo niak于2021年提出 该算法模拟了红狐的狩猎行为 具有收敛速度快 寻优精度高等优势 参考文献 Poap D
  • easyexcel读取excel将数据存到mysql【一个简单的例子】

    读取excel 1 xml里面增加maven
  • 使用Java程序向手机发送短信

    JAVA发送手机短信 有几种方法 1 使用webservice接口发送手机短信 这个可以使用sina提供的webservice进行发送 需要进行注册 2 使用短信mao的方式进行短信的发送 这种方式应该是比较的常用 前提是需要购买硬件设备
  • 变分推断

    一 概述 对于概率模型来说 如果从频率派角度来看就会是一个优化问题 从贝叶斯角度来看就会是一个积分问题 从贝叶斯角度来看 如果已有数据 x x x 对于新的样本 x hat x
  • 转债打新监听

    不炒股 只打新捡点小钱 package com github niefy modules job run import cn hutool core convert Convert import cn hutool core util Nu
  • 软件测试基础知识个人笔记

    一 为什么要测试 软件系统越来越成为生活中不可或缺的一部分 缺陷不可避免 软件不正确执行可能会导致很多问题 二 软件测试的定义 软件测试 描述一种用来促进鉴定软件的正确性 完整性 安全性和质量的过程 维基百科 公司主流观点 测试是一个包含计
  • eclipse注释模板

    eclipse注释模板 一 配置步骤 Eclipse中 gt Window gt Preferences gt Java gt Code Style gt Code Templates 二 模板示例 Files 文件 Title file
  • java 多线程执行时间测试,TestNG中实现多线程并行,提速用例的执行时间

    TestNG是一个开源自动化测试工具 TestNG源于Junit 最初用来做单元测试 可支持异常测试 忽略测试 超时测试 参数化测试和依赖测试 除了单元测试 TestNG的强大功能让他在接口和UI自动化中也占有一席之地 以Java为例 目前
  • Spring源码之Bean的生命周期

    Spring已经成为了目前最流行的第三方开源框架之一 我们在充分享受Spring IOC容器带来的便捷时 也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的 我们一起来讨论一下Spring中Bean的生命周期 Sprin
  • 内容提供者ContentProvider和内容解析者ContentResolver

    简介 ContentProvider 在android中的作用是对外共享数据 也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问 其他应用可以通过ContentProvider 对你应用中的数据进行添删改查 关
  • 微信小程序第三篇:获取页面节点信息

    文章目录 获取节点信息 createSelectorQuery selectViewport boundingClientRect fields 获取节点信息 createSelectorQuery wx createSelectorQue
  • MySQL数据库基础学习小终结:连接查询、表结构的修改、约束条件、MySQL与python交互

    目录 一 连接查询 1 内连接 2 外连接 二 表结构的修改 alter 1 修改表名 2 修改字段名 3 修改字段类型 modify 4 添加字段 1 添加日期字段 datetime 2 enum字段 5 删除字段 三 约束条件 1 默认
  • <artifactId>mysql-connector-java</artifactId>

    加载MySQL驱动程序 Class forName com mysql cj jdbc Driver 建立连接 String url jdbc mysql localhost database name String username us
  • CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数

    原子计数可以直接使用AtomicInteger 下面采用AtomicStampedReference的版本号控制原子操作解决ABA问题 最终结果一定最大的是200000 1A gt 2B gt 3A public class AtomicR