gpt4 book ai didi

java - 关于 Unsafe.getObjectVolatile 的使用

转载 作者:行者123 更新时间:2023-11-30 11:00:27 24 4
gpt4 key购买 nike

众所周知,数组即使是 volatile 的,在读取或写入元素时也不提供 volatile 语义,并发访问数组的第 k 个元素需要显式 volatile 读取。此 volatile 读取是通过 Unsafe.getObjectVolatile() 执行的。

我想知道,只声明一个对象,不声明没有volatile的数组,用Unsafe.getObjectVolatile()读取可以得到和声明volatile一样的效果吗?

最佳答案

只看java.util.concurrent.atomic.AtomicReferenceArray的实现

它在内部使用一个 private final Object[] array 字段并通过不安全的方式对其进行围栏访问,例如这是元素 setter :

public final void set(int i, E newValue) {
unsafe.putObjectVolatile(array, checkedByteOffset(i), newValue);
}

请注意,内部和不受支持的 Unsafe API 可能会随着 Java 9 消失/变得不可访问,所以如果您想使用它,请准备好一些前向移植工作一次 varhandles到达。和/或考虑实现后备代码路径。

关于java - 关于 Unsafe.getObjectVolatile 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31534706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com