和上一篇一样这几个类的使用方法几乎是一样的,所以我们以AtomicIntegerArray类来演示该原子类的使用,因为在上一篇中我们已经实验过了,这个包下的类确实是原子操作的,也就是说是线程安全的,所以下面的事例的重点在于演示方法的使用,而不是在编写多线程程序了。
[lake_card_mindmap.png] AtomicLongArray 常用方法如下 方法名 说明 long getAndIncrement(int i) 以原子方式将位置i处的元素原子设置为给定值 小试牛刀 指定大小 public class AtomicExample4 { /** * 初始化 数组长度为 10 */ private static AtomicLongArray arr = new AtomicLongArray(5); private static LongUnaryOperator longUnaryOperator = new LongUnaryOperator 相加,并返回结果 : 100 System.out.println("索引 0 addAndGet=" + arr.addAndGet(0, 100)); // 获取 AtomicLongArray */ AtomicLongArray arr = new AtomicLongArray(arrs); System.out.println("arr
为此,Java并发包(JUC)提供了AtomicLongArray——AtomicIntegerArray的64位兄弟。 文章被收录于专栏:云时代Java开发:原理、实战与优化第一章:设计哲学——为何需要AtomicLongArray? 1.2AtomicLongArray的核心价值AtomicLongArray内部封装了一个原生的long[]数组,直接对内存中的64位值进行原子操作。 解决方案:为每种行为指标类型分配一个AtomicLongArray。Agent根据其ID哈希到特定的槽位,原子地累加其贡献。 在这种环境下:内存效率:AtomicLongArray的紧凑内存布局至关重要,避免了因大量小对象导致的内存膨胀。
AtomicLongArray:原子更新长整型数组里的元素。 atomicLongArray = new AtomicLongArray(10); // 使用索引初始化数组的值 atomicLongArray.set(0, 1); // 设置索引为0的元素值为1 atomicLongArray.set(2, 10); // 设置索引为2的元素值为10 // 使用getAndUpdate方法更新索引为0的元素值,并且更新过程中打印原始值和新值 long oldValue = atomicLongArray.getAndUpdate(0, currentValue -> currentValue + 1L); // 获取并增加索引为0的元素值 System.out.println ("旧值: " + oldValue); // 输出旧值,即更新前的值 System.out.println("新值: " + atomicLongArray.get(0)); // 输出新值,即更新后的值通过直接获取验证
V newReference, boolean expectedMark, boolean newMark)数组AtomicIntegerArray、AtomicLongArray public class ClassName { AtomicLongArray atomicLongArray = new AtomicLongArray(new long[]{0, 1}); public void methodName() { int index = 0; long oldVal = atomicLongArray.get(index); long newVal = oldVal + 1; atomicLongArray.compareAndSet(index, oldVal, newVal); }}原子化的对象属性更新器原子化的对象属性更新器有
AtomicLongArray:原子更新长整型数组的元素。 AtomicReferenceArray<E>:原子更新引用类型数组的元素。
ReadWriteLock AtomicBoolean AtomicInteger AtomicLong AtomicReference AtomicStampedReference AtomicIntegerArray AtomicLongArray
原子更新数组 AtomicIntegerArray:原子更新整型数组元素 AtomicLongArray:原子更新长整型数组元素 AtomicReferenceArray:原子更新引用类型数组的元素 常用方法
使用原子的方式更新数组里的某个元素 AtomicIntegerArray:整形数组原子类 AtomicLongArray:长整形数组原子类 AtomicReferenceArray :引用类型数组原子类
数组类型 AtomicIntegerArray AtomicLongArray AtomicReferenceArray 数组类型是根据索引的偏移量直接完成内存地址定位并进行CAS操作的. unsafe.putObjectVolatile
目录一、线程安全在三个方面体现二、原子性—-atomic(1)AtomicInteger(2)AtomicStampedReference(3)AtomicLongArray(4)AtomicBoolean 依次来看AtomicInteger,AtomicStampedReference,AtomicLongArray,AtomicBoolean。 (3)AtomicLongArray这种维护数组的atomic类,可以选择性地更新其中某一个索引对应的值,也是进行原子性操作。这种对数组的操作的各种方法,会多处一个索引。
Atomic开头组成的工具类如下: AtomicBoolean AtomicInteger AtomicIntegerArray AtomicIntegerFieldUpdater AtomicLong AtomicLongArray 然后AtomicIntegerArray, AtomicLongArray, and AtomicReferenceArray 可以用来保证数组元素和数组引用的更新原子性,这里需要的注意的是仅仅元素的原子性
2、Array(数组类型原子类) Array 数组类型原子类,包括三种:AtomicIntegerArray、AtomicLongArray 和 AtomicReferenceArray。 AtomicIntegerArray、AtomicLongArray 和 AtomicReferenceArray 提供对 int、long、boolean 的数组元素的原子性操作。
原子类: AtomicBoolean,AtomicInteger, AtomicLong, AtomicReference 原子数组:AtomicIntegerArray, AtomicLongArray
static int MAX_THREADS = 128; final AtomicLong reclaimerVersion = new AtomicLong(0); final AtomicLongArray readersVersion = new AtomicLongArray(MAX_THREADS); public RCU() { for (int i=0; i < MAX_THREADS
- AtomicIntegerArray、AtomicLongArray 和 AtomicReferenceArray 类进一步扩展了原子操作,对这些类型的数组提供了支持。 包下提供了一些原子操作的常用类: - AtomicBoolean 、AtomicInteger 、AtomicLong 、 AtomicReference - AtomicIntegerArray 、AtomicLongArray
AtomicMarkableReference - 带有标记位的引用类型原子类 AtomicStampedReference - 带有版本号的引用类型原子类 数组类型 AtomicIntegerArray - 整形数组原子类 AtomicLongArray asr.getReference()); } } } } 四、数组类型 Java 提供了以下针对数组的原子类: AtomicIntegerArray - 整形数组原子类 AtomicLongArray 示例:AtomicIntegerArray 使用示例(AtomicLongArray 、AtomicReferenceArray 使用方式也类似) public class AtomicIntegerArrayDemo
return current; } } 我们可以看到,它的实现原理是死循环 + CAS. 2.原子更新数组 (1) AtomicIntegerArray 原子更新整形数组里的元素 (2) AtomicLongArray
AtomicInteger:整形原子类 AtomicLong:长整型原子类 AtomicBoolean:布尔型原子类 数组类型 使用原子的方式更新数组里的某个元素 AtomicIntegerArray:整形数组原子类 AtomicLongArray
AtomicLongArray:原子更新长整型数组里的元素。 AtomicReferenceArray:原子更新引用类型数组里的元素。 原子更新引用。 AtomicLongArray:原子更新长整型数组里的元素。 AtomicReferenceArray:原子更新引用类型数组里的元素。