首页 > 其他分享 >ABA问题

ABA问题

时间:2023-12-12 22:33:38浏览次数:21  
标签:ABA System 问题 getReference println balance AtomicStampedReference out

CAS缺点:循环时间⻓开销很⼤

引出来ABA问题???

假设这样⼀种场景,当第⼀个线程执⾏CAS(V,E,U)操作。在获取到当前变量V,准备修改为新值U前,另外两个线程已连续修改了两次变量V的值,使得该值⼜恢复为旧值,这样的话,我们就⽆法

正确判断这个变量是否已被修改过,如下图:

AtomicStampedReference<Integer> balance = new AtomicStampedReference(1000,0);

解决问题

package org.example.c4;

import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicStampedReference;

/***
 * @Author 徐庶
 * @Slogan 致敬大师,致敬未来的你
 */
public class C3_CAS_ABA {


    public static void main(String[] args) throws InterruptedException {

        // 张三余额
        AtomicStampedReference<Integer> balance = new AtomicStampedReference(1000,0);

        System.out.println("(A)张三余额:"+ balance.getReference());

        // 财务发3000工资
        balance.compareAndSet(balance.getReference(),4000,balance.getStamp(),balance.getStamp()+1);
        System.out.println("(B)财务发3000工资:"+ balance.getReference());



        // 老婆取3000工资
        balance.compareAndSet(balance.getReference(),1000,balance.getStamp(),balance.getStamp()+1);

        System.out.println("(A)老婆取3000工资:"+ balance.getReference());


        // 张三查工资
        if(balance.getReference()>3000){

            System.out.println("张三美滋滋"+ balance.getReference());
        }else{
            if(balance.getStamp()==1){
                System.out.println("张三找财务麻烦:");
            }
            else{
                System.out.println("张三找老婆麻烦:");
            }

        }
    }


}

标签:ABA,System,问题,getReference,println,balance,AtomicStampedReference,out
From: https://www.cnblogs.com/lin513/p/17898004.html

相关文章

  • WPF 解决PasswordBox 属性Password无法绑定到后台的问题
    在WPF中,你可以使用密码框的Password属性来绑定到后台,但是由于安全性考虑,WPF的密码框不直接支持双向绑定。然而,你仍然可以通过其他方式实现将密码框的内容绑定到后台。一种常见的方法是创建一个附加属性(AttachedProperty)来实现密码框的双向绑定。以下是一个简单的示例代码:c......
  • 解决Idea找不到URL问题
    解决Idea找不到URL问题 我这几天遇到一个特别恶心的问题,查了很多资料,都是没用的后来自己静下心来,发现自己的import导包错了,我用的是jakarta,jakarta主要是利用Tomcate10以上的版本才有,我因为电脑里有Tomcat10和Tomcate9两个版本,所以默认了导入jarkarta,我删除后导入javax的,完全能......
  • ST表 RMQ(区间最大/最小值查询)问题
    主要应用倍增思想预处理:O(nlogn)查询:O(1)f[i][j]是以i为起点,长度为2j的区间中的最大值(一个点一个单位长度,不是一条线段)区间终点:i+2j-1<=n区间长度的指数k=log2(r-l+1),只有当r-l+1为2n-1时是恰好分割,其他时候有重叠,但问题不大代码 #include<iostream>#include<cstring>#......
  • GPT-4「变懒」问题将被修复;英伟达选择越南成公司“第二故乡”丨 RTE 开发者日报 Vol.1
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅......
  • 02-项目问题集6021
    目录一.hid问题一.hid问题hid发键值getevent只有在,连上第一次按按键可以获取到//需要按下抬起一起发if(APP_hidDevGapState==GAPROLE_CONNECTED){hidConsumer_CmdReport(key_code_hid_control,CONSUMER_REPORT_LEN);hidConsumer_CmdReport(key_code_rel......
  • Quick BI 数据分析 - Alibaba Cloud的文档PDF
     下载地址:https://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/download%2Fpdf%2F164487%2F%25E6%2595%25B0%25E6%258D%25AE%25E5%2588%2586%25E6%259E%2590_intl_zh-CN.pdf      ......
  • 国标GB28181安防视频云平台EasyCVR出现持续重启现象,是什么问题?该如何解决?
    视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强......
  • cdr 小问题解决方案
    1,插件卸载不干净1.1:插件自带的卸载1.2:点击cdr文件夹,选择路径CorelDRAWGraphicsSuiteX8\Draw\plugins64,删除其中所有的"*.cpg"文件(如果你安装了其他插件,这里也会有其他插件的cpg文件,请仔细辨认。或者直接全部删了,到时再安装一下你需要保留的插件)。 2,cdr矩形,对象属性无法更......
  • python cv2.imread 读取中文路径的图片返回为None的问题
    使用cv2读取图片时,输出图片形状大小时出现报错“'NoneType'objecthasnoattributeshape”,后来排查发现读取图片的返回值image为None,这就说明图片根本就没有被读取。下面图片是问题问题解决后,为了更好的展示,写的代码展示,这是正常的因果关系,找错误排查时是从下往上推。 ......
  • vue3 对子组件使用 v-model,关于绑定对象的问题
    这里有最基本的使用,vue3官网组件v-model我来讲讲注意事项,如果你v-model的是个reactive创建的对象,那么将不起作用,必须得是ref创建的对象要知道,v-model:<inputv-model="searchText"/><!--等价于--><input:value="searchText"@input="searchText=$event.ta......