首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

AtomicInteger源码解析

AtomicInteger的实现原理 AtomicInteger采用基于CAS进行数据的原子性操作的Unsafe工具类,Unsafe类通过在对象实例化的时候记录数据的地址,并通过比较获取的原有数据与新获取数据是否一致来确定数据是否被其他线程修改...而对于数据的可见性,AtomicInteger采用volatile关键字进行修饰,使得线程对数据的操作均作用于主存,从而保证数据在多线程之间的可见性。AtomicInteger的初始化如下所示。...valueOffset = unsafe.objectFieldOffset (AtomicInteger.class.getDeclaredField("value")...private volatile int value; AtomicInteger提供的主要接口 AtomicInteger提供基本的数据操作,对于复杂的数据操作,其提供了lambda 表达式进行支持...以下是AtomicInteger提供的主要接口。

27230

AtomicInteger 核心源码解析

原子类使用 CAS 替代锁,实现基本类似,我们本文以 AtomicInteger 为例来研究其究竟是如何实现无锁同步的. 前言 一个可以自动更新的int值。...AtomicInteger用于原子递增计数器之类的应用程序,并且不能用作Integer的替代品。 但是,此类确实继承了Number,以允许处理基于数字的类的工具和实用程序进行统一访问。...字段,而 value 有 volatile 修饰. valueOffset 在静态代码块中完成初始化: [5088755_1583756733927_20200309190526874.png] AtomicInteger...构造方法 AtomicInteger 提供两个构造函数 用给定值初始化 AtomicInteger [5088755_1583756733906_20200309190902563.png] 无参构造,...counter = new AtomicInteger(); int oldV = counter.get(); counter.set(10); 但该实现是错的,因为 counter.get() 与

33641

AtomicInteger 核心源码解析

原子类使用 CAS 替代锁,实现基本类似,我们本文以 AtomicInteger 为例来研究其究竟是如何实现无锁同步的. 前言 一个可以自动更新的int值。...AtomicInteger用于原子递增计数器之类的应用程序,并且不能用作Integer的替代品。 但是,此类确实继承了Number,以允许处理基于数字的类的工具和实用程序进行统一访问。 继承关系 ?...AtomicInteger 的初衷就是在不使用锁的前提下,实现原子的读-改-写操作,这是通过 Unsafe 类提供的 CAS 操作实现的,CAS 操作有底层 CPU 直接支持。...构造方法 AtomicInteger 提供两个构造函数 用给定值初始化 AtomicInteger ? 无参构造,初始值为 0 ? 注意,该类所有方法都被 final 修饰,子类无法重写!...counter = new AtomicInteger(); int oldV = counter.get(); counter.set(10); 但该实现是错的,因为 counter.get() 与

42421

了解 Java 中的 AtomicInteger

Java 提供了一系列的原子类来支持这一需求,其中之一就是 AtomicInteger。本文将介绍 AtomicInteger 类的基本概念、用法以及在多线程环境中的应用场景。 1....AtomicInteger 的简介 在多线程编程中,保证数据的原子性操作是至关重要的。而 Java 提供了一系列的原子类来支持这一需求,其中之一就是 AtomicInteger。...AtomicInteger 的基本操作 AtomicInteger 类提供了一系列方法来对整型变量进行原子操作,主要包括以下几种基本操作: get():获取当前的整型值。...AtomicInteger 的使用示例 下面是一个简单的示例,展示了如何在多线程环境下使用 AtomicInteger: import java.util.concurrent.atomic.AtomicInteger...AtomicInteger 的应用场景 AtomicInteger 是 Java 中用于实现原子性整型操作的一个重要类,它在多线程编程中有许多应用场景。

9110

17.AtomicInteger、AtomicBoolean的底层原理

老王:是啊,之前我们只是简单介绍了Atomic的体系,今天我们就要进入Atomic底层原理的的学习了,首先我们从AtomicInteger这个比较简单的原子类开始,在说AtomicInteger的底层原理之前呢...class AtomicAddDemo { private static AtomicInteger value = new AtomicInteger(0); public...小陈:是啊,使用AtomicInteger两个线程执行20000次自增操作得到的结果于预期值一致,那AtomicInteger底层到底是怎么确保线程安全的呢?...AtomicInteger的内部属性 老王:我们先通过源码来看一下AtomicInteger内部有哪些属性以及作用是什么: public class AtomicInteger extends Number...AtomicInteger的构造方法 老王:让我们再来看看AtomicInteger的构造方法源码: public AtomicInteger(int initialValue) { value

16120

AtomicInteger、AtomicBoolean、AtomicLong等原子类的使用

下面我们看一下具有原子操作的类AtomicInteger、AtomicBoolean、AtomicLong。这三个类的的方法使用都是一样的,我们重点看一下AtomicInteger类的使用。...get()的作用是获取当前AtomicInteger类中的值。然后将获取的AtomicInteger类中的值执行加1运算。...最重要的就是这个compareAndSet方法,我们知道这个方法的作用是将AtomicInteger类中的值与预期值做比较,如果相等,那就把AtomicInteger类中的值设置为方法参数的值,并且这个方法也是原子操作...说明get()方法获取的值不是最新的了,也就是说有其它线程已经对AtomicInteger类中的值与做了修改了,那么方法就会一直执行循环,然后继续判断,一直到compareAndSet方法返回ture时为止

81830

多线程 里面 使用AtomicInteger类,保证线程安全

3 解决 AtomicInteger出现解决了上面的问题,使用它来执行统计: static AtomicInteger at = new AtomicInteger(0); public static...InterruptedException e) { e.printStackTrace(); } System.out.println("count = " + at.get()); } AtomicInteger...4 总结 AtomicInteger能够实现整型数据的原子操作,在多线程并发的环境下能保证数据安全,而且内部使用乐观锁实现,比使用锁机制的并发性能高; volatile保证了一个线程修改数据时,其它线程也能看到数据的修改...CAS操作保证了数据修改的安全性 5 线程统计失败个数 多个线程执行一段逻辑,统计有多少个线程失败了 ConcurrentMap jobTimeoutCountMap...timeoutCount = jobTimeoutCountMap.putIfAbsent(22, new AtomicInteger(1)); if

75120
领券
http://www.vxiaotou.com