首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AtomicInteger weakCompareAndSet上的"虚假失败"是什么意思?

在Java中,AtomicInteger是一个用于执行原子操作的类,其中的weakCompareAndSet方法用于比较并设置一个整数值。"虚假失败"是指在执行weakCompareAndSet方法时,即使当前值与预期值相等,但方法返回false,这种情况被称为"虚假失败"。

"虚假失败"的原因是多线程环境下,在执行weakCompareAndSet方法时,可能会有其他线程同时修改了该整数值,导致当前线程的比较值不再准确,从而导致weakCompareAndSet方法返回false。

在这种情况下,应该再次尝试执行weakCompareAndSet方法,直到操作成功为止。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AtomicInteger源码分析详解

* * <a href="package-summary.html#<em>weakCompareAndSet</em>"可能会失败 * 虚假并且不提供订购保证, 也是 * 很少是一个合适替代品...* 该方法可能可能虚假失败并且不会提供一个排序保证,所以它在极少情况下用于代替compareAndSet方法。...* 看源码doc是这样子解释: 该方法可能可能虚假失败并且不会提供一个排序保证,所以它在极少情况下用于代替compareAndSet方法。...在一些平台上,在正常情况下weak版本比compareAndSet更高效,但是不同是任何给定weakCompareAndSet方法调用都可能会返回一个虚假失败( 无任何明显原因 )。...( 一个虚假失败可能是由于内存冲突影响,而和预期值(expectedValue)和当前值是否相等无关 )。

64550

对 volatile、compareAndSet、weakCompareAndSet 一些思考

该方法可能可能虚假失败并且不会提供一个排序保证,所以它在极少情况下用于代替compareAndSet方法。 第一次看weakCompareAndSet doc文档说明时,我是困惑。...在一些平台上,在正常情况下weak版本比compareAndSet更高效,但是不同是任何给定weakCompareAndSet方法调用都可能会返回一个虚假失败( 无任何明显原因 )。...( 一个虚假失败可能是由于内存冲突影响,而和预期值(expectedValue)和当前值是否相等无关 )。...这二段话是什么意思了,也就是说weakCompareAndSet底层不会创建任何happen-before保证,也就是不会对volatile字段操作前后加入内存屏障。...,weakCompareAndSet方法并没有被真是意义实现,目前该方法所呈现出来效果与compareAndSet方法是一样

1.2K61

Package java.util.concurrent.atomic Description

该包中类还包含获取和无条件设置值方法,以及下面描述较弱条件原子更新操作weakCompareAndSet 。 这些方法规范使实现能够采用当代处理器可用高效机器级原子指令。...类实例AtomicBoolean , AtomicInteger , AtomicLong和AtomicReference各自提供访问和更新相应类型单个变量。...每个类还提供了适用于该类型实用方法。 例如,类AtomicLong和AtomicInteger提供原子增量方法。...(这样虚假故障可能是由于与预期值和当前值是否相等无关内存争用效应)。另外, weakCompareAndSet不提供同步控制通常需要排序保证。...在那些您不希望这样做情况下,您可以使用AtomicInteger来保存byte值,并适当地投射。

46520

AtomicInteger 核心源码解析

原子类使用 CAS 替代锁,实现基本类似,我们本文以 AtomicInteger 为例来研究其究竟是如何实现无锁同步. 前言 一个可以自动更新int值。...AtomicInteger用于原子递增计数器之类应用程序,并且不能用作Integer替代品。 但是,此类确实继承了Number,以允许处理基于数字工具和实用程序进行统一访问。 继承关系 ?...AtomicInteger 初衷就是在不使用锁前提下,实现原子读-改-写操作,这是通过 Unsafe 类提供 CAS 操作实现,CAS 操作有底层 CPU 直接支持。...getAndSet 无脑更新 value ,并发场景下不会一直如此简单,有时要求 value 满足特定条件时才设置,这是非常典型原子复合操作 检查某条件是否成立 根据条件成功、失败执行不同操作 在业务代码中...weakCompareAndSet 弱化版compareAndSet,可能会虚假失败,并且不提供排序保证,因此,很少是compareAndSet适当替代方法,JDK8源码中未曾使用过它,因为二者在

43721

AtomicInteger 核心源码解析

原子类使用 CAS 替代锁,实现基本类似,我们本文以 AtomicInteger 为例来研究其究竟是如何实现无锁同步. 前言 一个可以自动更新int值。...AtomicInteger用于原子递增计数器之类应用程序,并且不能用作Integer替代品。 但是,此类确实继承了Number,以允许处理基于数字工具和实用程序进行统一访问。...AtomicInteger counter = new AtomicInteger(); int oldV = counter.get(); counter.set(10); 但该实现是错,因为 counter.get...检查某条件是否成立 根据条件成功、失败执行不同操作 在业务代码中,这种操作一般用锁实现,但 AtomicInteger 原生提供 compareAndSet 无锁完美解决....weakCompareAndSet 弱化版compareAndSet,可能会虚假失败,并且不提供排序保证,因此,很少是compareAndSet适当替代方法,JDK8源码中未曾使用过它,因为二者在

34441

atomicBoolean源码分析

把对象序列化成字节码,保存到指定介质(如磁盘等) 2....在一些平台上,在正常情况下weak版本比compareAndSet更高效, 但是不同是任何给定weakCompareAndSet方法调用都可能会返回一个虚假失败( 无任何明显原因 )。...( 一个虚假失败可能是由于内存冲突影响,而和预期值(expectedValue)和当前值是否相等无关 )。...当一个线程看到一个通过weakCompareAndSet修改原子变量时,它不被要求看到其他变量修改,即便该变量修改在weakCompareAndSet操作之前。...weakCompareAndSet实现了一个变量原子读操作和有条件原子写操作,但是它不会创建任何happen-before排序, 所以该方法不提供对weakCompareAndSet操作目标变量以外变量在之前或在之后读或写操作保证

48520

atomicLong源码分析详解

把对象序列化成字节码,保存到指定介质(如磁盘等) 2....失败线程 不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败线程放弃操作。基于这样原理,CAS 操作即时没有锁,也可以发现其他线程对当前线程干扰,并进行恰当处理。...在一些平台上,在正常情况下weak版本比compareAndSet更高效, 但是不同是任何给定weakCompareAndSet方法调用都可能会返回一个虚假失败( 无任何明显原因 )。...( 一个虚假失败可能是由于内存冲突影响,而和预期值(expectedValue)和当前值是否相等无关 )。...当一个线程看到一个通过weakCompareAndSet修改原子变量时,它不被要求看到其他变量修改,即便该变量修改在weakCompareAndSet操作之前。

53710

告诉你一个 AtomicInteger 惊天大秘密!

CAS 方法 我们一直常说 CAS 其实就是 CompareAndSet 方法,这个方法顾名思义,就是 「比较并更新」 意思,当然这是字面理解,字面理解有点偏差,其实人家意思是先比较,如果满足那么再进行更新...类型,如果是 true 就表示比较并更新成功,否则表示失败。...weakCompareAndSet: 妈非常认真看了好几遍,发现 JDK1.8 这个方法和 compareAndSet 方法完全一摸一样啊,坑我。。。 ? 但是真的是这样么?...CAS 能够保证原子性,它底层是什么?...可以是由 A -> B -> A 这种情况,但是 AtomicInteger 却不会这么认为,它只相信它看到,它看到是什么是什么。举个例子来说 假如现在有一个单链表,如下图所示 ?

40520

AtomicInteger详解

一、AtomicInteger 因为在阻塞队列中LinkedBlockingQueue中对容量维护使用了Atomic类,所以需要对该类学习下,如何使用AtomicInteger来保证线程操作原子性...实际源码中可以看出AtomicInteger类中操作思想基本是基于CAS+volatile。...(1)CAS操作失败后,会继续尝试更新变量,如果一直更新不成功,会一直自旋。在高并发情况下,CPU压力会因此增加。...操作二:由于操作二和操作一存在并发行为,因此A-取出内存原值仍为100,但是此时V已经被更新成了50,B-新值50。V!=A,所以更新失败。...这种场景下,实际用户认为自己账户实际应该为100元,但是由于ABA问题,导致在用户无感知,系统多次重复提交情况下而多扣了50元。

96010

为什么要有 AtomicReference ?

value 就是 AtomicReference 中实际值,因为有 volatile ,这个值实际就是内存值。...语义,内存屏障之前所有写操作都要写入内存;内存屏障之后读操作都可以获得同步屏障之前写操作结果。因此,对于敏感程序块,写操作之后、读操作之前可以插入内存屏障。...,只能解析到这里了,如果大家懂这段代码一定告诉我,让我请教一波) weakCompareAndSet 方法 weakCompareAndSet: 妈非常认真看了好几遍,发现 JDK1.8 这个方法和...并不是,JDK 源码很博大精深,才不会设计一个重复方法,你想想 JDK 团队也不是会犯这种低级团队,但是原因是什么呢? 《Java 高并发详解》这本书给出了我们一个答案。...此篇 AtomicReference 文章基本涵盖了网络所有关于 AtomicReference 内容了,遗憾是就是 cpp 源码可能分析不是很到位,这需要充足 C/C++ 编程知识,如果有读者朋友们有最新研究成果

90330

java架构之路(多线程)原子操作,Atomic与Unsafe魔术类

这次不讲原理了,主要是一些应用方面的知识,和几次JUC并发编程知识点更容易理解....CountDownLatch和CyclicBarrier都有让多个线程等待同步然后再开始下一步动作意思,但是CountDownLatch下一步动作实施者是主线程,具有不可重复性;而CyclicBarrier...()); }else{ System.out.println("CAS修改失败,当前版本为:"+atomicInteger.getStamp...然后干扰线程进行修改,每次修改时版本号加一,干扰线程结束,而主线程想继续修改时,发现版本不匹配,修改失败。 ?   其余Atomic类使用都是大同小异,可以自行尝试一遍。   ...,都是一些简单使用,我们开始时候说到了什么是原子操作,接下来我们说了Atomic类基本使用,再就是什么是ABA问题,如何用Atomic来解决ABA问题,再就是我们魔术类Unsafe类,越过虚拟机直接来操作我们系统一些操作

44410
领券