对象参数更新
AtomicIntegerFieldUpdater
允许对指定类的实例中的int类型字段进行原子更新。这意味着在多线程环境下,你可以安全地更新这个字段,而不会导致不一致或者竞态条件的问题。
类方法说明:
getAndUpdate(T obj, IntUnaryOperator updateFunction)
: 获取指定对象上的整型字段的当前值,并应用给定的一元操作函数(updateFunction)进行更新,最后返回更新前的值。decrementAndGet(T obj)
: 将指定对象上的整型字段减1,并返回减1后的值。newUpdater(Class<U> tclass, String fieldName)
: 创建一个新的AtomicIntegerFieldUpdater
实例,用于更新指定类tclass
中名为fieldName
的整型字段。weakCompareAndSet(T obj, int expect, int update)
: 如果指定对象上的整型字段的当前值等于预期值(expect),则尝试将其更新为新值(update)。该方法可能会失败,因为它不保证立即可见性。返回一个布尔值表示是否成功更新。lazySet(T obj, int newValue)
: 设置指定对象上的整型字段的值为新值(newValue),但不保证立即可见性。compareAndSet(T obj, int expect, int update)
: 如果指定对象上的整型字段的当前值等于预期值(expect),则将其更新为新值(update)。返回一个布尔值表示是否成功更新。getAndDecrement(T obj)
: 获取指定对象上的整型字段的当前值,并将其减1,最后返回减1后的值。get(T obj)
: 获取指定对象上的整型字段的当前值。getAndSet(T obj, int newValue)
: 获取指定对象上的整型字段的当前值,并将其设置为新值(newValue)。返回旧值。addAndGet(T obj, int delta)
: 将指定的增量(delta)添加到指定对象上的整型字段,并返回结果。getAndIncrement(T obj)
: 获取指定对象上的整型字段的当前值,并将其自增1,最后返回自增后的值。getAndAccumulate(T obj, int x, IntBinaryOperator accumulatorFunction)
: 对指定对象上的整型字段进行累加操作,并返回累加后的结果。累加操作由提供的累加器函数(accumulatorFunction)定义。accumulateAndGet(T obj, int x, IntBinaryOperator accumulatorFunction)
: 对指定对象上的整型字段进行累加操作,并返回累加后的结果。累加操作由提供的累加器函数(accumulatorFunction)定义。incrementAndGet(T obj)
: 获取指定对象上的整型字段的当前值,将其自增1,然后将结果写回该位置,最后返回操作后的值。set(T obj, int newValue)
: 设置指定对象上的整型字段的值为新值(newValue)。getAndAdd(T obj, int delta)
: 获取指定对象上的整型字段的当前值,将其加上指定的增量(delta),然后将结果写回该位置,最后返回操作前的值。updateAndGet(T obj, IntUnaryOperator updateFunction)
: 应用给定的一元操作函数(updateFunction)到指定对象上的整型字段上,并返回操作后的值。
AtomicLongFieldUpdater
类似于AtomicIntegerFieldUpdater,但是用于更新long类型的字段。
类方法说明:
compareAndSet(T obj, long expect, long update)
: 如果对象obj
的long
类型字段当前值等于expect
,则将其设置为update
,并返回true
;否则返回false
。isSamePackage(Class<?> class1, Class<?> class2)
: 判断两个类是否在同一个包内。getAndUpdate(T obj, LongUnaryOperator operator)
: 获取对象obj
的long
类型字段的当前值,然后使用给定的操作符operator
对其进行更新,并返回更新前的值。set(T obj, long newValue)
: 将对象obj
的long
类型字段设置为新值newValue
。get(T obj)
: 获取对象obj
的long
类型字段的当前值。getAndSet(T obj, long newValue)
: 获取对象obj
的long
类型字段的当前值,并将其设置为新值newValue
,最后返回旧值。getAndAccumulate(T obj, long x, LongBinaryOperator accumulatorFunction)
: 获取对象obj
的long
类型字段的当前值,然后使用给定的累加器函数accumulatorFunction
对其进行累加操作,并将结果写回该字段,最后返回累加前的值。weakCompareAndSet(T obj, long expect, long update)
: 如果对象obj
的long
类型字段当前值等于expect
,则尝试将其设置为update
,但不保证立即可见性。返回一个布尔值表示是否成功更新。lazySet(T obj, long newValue)
: 将对象obj
的long
类型字段设置为新值newValue
,但不保证立即可见性。newUpdater(Class<U> tclass, String fieldName)
: 创建一个新的AtomicLongFieldUpdater<U>
实例,用于更新指定类tclass
中名为fieldName
的long
类型字段。incrementAndGet(T obj)
: 将对象obj
的long
类型字段自增1,并返回自增后的值。addAndGet(T obj, long delta)
: 将对象obj
的long
类型字段加上指定的增量delta
,并返回结果。decrementAndGet(T obj)
: 将对象obj
的long
类型字段减1,并返回减1后的值。isAncestor(ClassLoader parent, ClassLoader child)
: 判断parent
是否是child
的祖先类加载器。getAndDecrement(T obj)
: 获取对象obj
的long
类型字段的当前值,并将其减1,最后返回减1后的值。updateAndGet(T obj, LongUnaryOperator operator)
: 使用给定的操作符operator
对对象obj
的long
类型字段进行更新,并返回更新后的值。accumulateAndGet(T obj, long x, LongBinaryOperator accumulatorFunction)
: 对对象obj
的long
类型字段进行累加操作,并返回累加后的结果。累加操作由提供的累加器函数accumulatorFunction
定义。getAndAdd(T obj, long delta)
: 获取对象obj
的long
类型字段的当前值,将其加上指定的增量delta
,然后将结果写回该字段,最后返回操作前的值。getAndIncrement(T obj)
: 获取对象obj
的long
类型字段的当前值,将其自增1,然后将结果写回该字段,最后返回操作后的值。getPackageName(Class<?> clazz)
: 获取类clazz
所在的包名。
AtomicReferenceFieldUpdater
与AtomicIntegerFieldUpdater和AtomicLongFieldUpdater类似,但是用于更新引用类型的字段。
类方法说明
lazySet(T obj, V newValue)
: 将给定对象的字段设置为新值,但不会立即刷新缓存,而是在下次访问时才更新。getAndSet(T obj, V newValue)
: 获取给定对象的字段的当前值,并将其设置为新值。weakCompareAndSet(T obj, V expect, V update)
: 如果给定对象的字段当前值等于期望值,则将其设置为更新值。这个方法可能会失败,因为它不保证原子性。newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
: 创建一个新的AtomicReferenceFieldUpdater<U, W>
实例,用于更新指定类的指定字段。getAndUpdate(T obj, UnaryOperator<V> updateFunction)
: 获取给定对象的字段的当前值,并使用给定的更新函数对其进行更新。compareAndSet(T obj, V expect, V update)
: 如果给定对象的字段当前值等于期望值,则将其设置为更新值。这个方法是原子性的。set(T obj, V newValue)
: 将给定对象的字段设置为新值。getAndAccumulate(T obj, V x, BinaryOperator<V> accumulatorFunction)
: 获取给定对象的字段的当前值,并使用给定的累加器函数对其进行累加操作。accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)
: 对给定对象的字段进行累加操作,并返回累加后的值。get(T obj)
: 获取给定对象的字段的当前值。updateAndGet(T obj, UnaryOperator<V> updateFunction)
: 使用给定的更新函数对给定对象的字段进行更新,并返回更新后的值。
引用更新
AtomicMarkableReference
允许原子地更新一个引用,并且给这个引用附加一个标记。这可以用于多种场景,例如实现非阻塞的数据结构。
AtomicMarkableReference<V>
是一个泛型类,用于实现原子地更新引用和标记。它提供了一组方法来操作引用和标记,以确保在并发环境中的线程安全性。以下是各个方法的作用:
-
casPair(Pair<V>, Pair<V>)
: 尝试原子地将当前引用和标记设置为给定的一对新值(一个包含新的引用和标记)。如果成功,返回 true;否则返回 false。 -
attemptMark(V, boolean)
: 尝试原子地将当前引用的值设置为给定的新引用,并将标记设置为给定的新标记。如果成功,返回 true;否则返回 false。 -
weakCompareAndSet(V, V, boolean, boolean)
: 比较并设置当前引用和标记的值。如果当前引用等于预期引用且当前标记等于预期标记,则将它们设置为给定的新值。这个方法是非阻塞的,即使失败也不会抛出异常。 -
isMarked()
: 返回当前引用是否被标记。 -
get(boolean[])
: 获取当前引用的值,并将当前标记存储到提供的布尔数组中。 -
objectFieldOffset(Unsafe, String, Class<?>)
: 计算给定字段在对象中的偏移量。这个方法通常用于直接操作内存,需要谨慎使用。 -
getReference()
: 获取当前引用的值。 -
compareAndSet(V, V, boolean, boolean)
: 比较并设置当前引用和标记的值。如果当前引用等于预期引用且当前标记等于预期标记,则将它们设置为给定的新值。这个方法是阻塞的,如果失败会抛出异常。 -
set(V, boolean)
: 将当前引用的值设置为给定的新引用,并将标记设置为给定的新标记。
AtomicReferenceArray
提供了对引用数组的原子操作。你可以安全地在多线程环境下更新数组里的单个元素。
AtomicReferenceArray<E>
是一个泛型类,用于实现一个线程安全的数组,其中每个元素都是原子引用类型。以下是各个方法的作用:
updateAndGet(int i, UnaryOperator<E> updateFunction)
: 对指定索引位置的元素应用给定的一元操作函数,并返回更新后的值。weakCompareAndSet(int i, E expectedValue, E newValue)
: 如果指定索引位置的元素等于预期值,则将其设置为新值。这个方法是非阻塞的,即使失败也不会抛出异常。accumulateAndGet(int i, E x, BinaryOperator<E> accumulatorFunction)
: 对指定索引位置的元素应用给定的二元操作函数,并将结果存储在该位置,然后返回结果。readObject(ObjectInputStream s)
: 从输入流中读取对象,并将其赋值给当前对象。getAndUpdate(int i, UnaryOperator<E> updateFunction)
: 获取指定索引位置的元素的当前值,对其应用给定的一元操作函数,并将结果存储在该位置,最后返回原始值。compareAndSetRaw(long offset, E expectedValue, E newValue)
: 如果指定偏移量处的元素等于预期值,则将其设置为新值。这个方法是底层方法,通常不直接使用。get(int i)
: 获取指定索引位置的元素的值。length()
: 返回数组的长度。getRaw(long offset)
: 获取指定偏移量处的元素的值。这个方法是底层方法,通常不直接使用。compareAndSet(int i, E expectedValue, E newValue)
: 如果指定索引位置的元素等于预期值,则将其设置为新值。这个方法是阻塞的,如果失败会抛出异常。toString()
: 返回表示数组内容的字符串。getAndSet(int i, E newValue)
: 获取指定索引位置的元素的当前值,并将其设置为新值,最后返回原始值。byteOffset(int i)
: 返回指定索引位置的元素在内存中的字节偏移量。checkedByteOffset(int i)
: 返回指定索引位置的元素在内存中的字节偏移量,如果偏移量超出范围,则抛出异常。getAndAccumulate(int i, E x, BinaryOperator<E> accumulatorFunction)
: 获取指定索引位置的元素的当前值,对其应用给定的二元操作函数,并将结果存储在该位置,最后返回原始值。set(int i, E newValue)
: 将指定索引位置的元素设置为新值。lazySet(int i, E newValue)
: 将指定索引位置的元素设置为新值,但不立即刷新缓存,而是在下次访问时才更新。