首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Unsafe.getObjectVolatile的使用

关于Unsafe.getObjectVolatile的使用
EN

Stack Overflow用户
提问于 2015-07-21 09:03:58
回答 1查看 2.3K关注 0票数 2

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

我想知道,只声明一个对象,而不是没有易失性的数组,使用Unsafe.getObjectVolatile()来读取它可以获得与使用volatile声明它相同的效果吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-27 05:50:12

只需看一下java.util.concurrent.atomic.AtomicReferenceArray的实现

它在内部使用一个private final Object[] array字段,并通过不安全对其进行隔离访问,例如,下面是元素设置器:

代码语言:javascript
复制
public final void set(int i, E newValue) {
    unsafe.putObjectVolatile(array, checkedByteOffset(i), newValue);
}

请注意,内部和不受支持的不安全API可能会在java 9中消失/变得不可访问,因此,如果您想使用它,那么在变柄到达后准备进行一些移植工作。和/或考虑实现回退代码页。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31534706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档