Java高并发中AtomicIntegerFieldUpdater访问权限问题
【摘要】 为提升数据处理速度,我们常对数据进行并发处理,而并发处理会给我们的代码带来同步问题。JDK5之后出现了J.U.C包以处理高并发相关问题AtomicIntegerFieldUpdater即是对类属性进行原子访问的实现,而访问非public属性时可能会产生异常而导致整个处理过程终止。 AtomicIntegerFieldUpdater所要修改的变量必须在当前对象可访问范围内,否则将抛出异常Ill...
为提升数据处理速度,我们常对数据进行并发处理,而并发处理会给我们的代码带来同步问题。JDK5之后出现了J.U.C包以处理高并发相关问题
AtomicIntegerFieldUpdater即是对类属性进行原子访问的实现,而访问非public属性时可能会产生异常而导致整个处理过程终止。 AtomicIntegerFieldUpdater所要修改的变量必须在当前对象可访问范围内,否则将抛出异常IllegalAccessException。
java.lang.RuntimeException: java.lang.IllegalAccessException: Class XXXXX can not access a member of class XXX with modifiers “private volatile”
这一点是很多开发者没有注意到的,误以为JUC反射可以跨权限访问属性,下面我们来看看这个异常和AtomicIntegerFieldUpdater的相关实现:
原因在AtomicIntegerFieldUpdaterImpl构造函数之中
( 摘自OpenJDK源码
1 | final Field field; |
代码中的第10行直接获取Modifiers,并没有抑制JVM的访问权限检查。故AtomicIntegerFieldUpdater受访问修饰符限制。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)