gpt4 book ai didi

java - 为什么 JPA2 MetaModel 会生成带有 volatile 成员的对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:40 28 4
gpt4 key购买 nike

我刚刚使用 org.apache.openjpa.persistence.meta.AnnotationProcessor6 为我的 JPA2 实体生成元模型。

@javax.annotation.Generated
(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",
date="Tue Nov 22 09:49:03 CET 2011")
public class Entity_ {
public static volatile SingularAttribute<Entity,Entity> id;
public static volatile SingularAttribute<Entity,String> value;
public static volatile SingularAttribute<Entity,String> order;
}

有人可以解释为什么在这种情况下属性被标记为 volatile 吗?

谢谢。

最佳答案

设置静态变量的线程可能与您用来访问它们的线程不同,因此需要使用 volatile 修饰符来同步所有线程之间的内存。

没有volatile的场景是这样的:

  1. 您的线程在 JPA 提供程序初始化之前访问变量并为静态字段获取 null
  2. JPA 提供程序从不同的线程初始化并将静态字段设置为非空值
  3. 您的线程再次访问静态字段。在这种情况下,您线程的缓存内存将看不到更改并继续为所有静态字段返回 null

关于java - 为什么 JPA2 MetaModel 会生成带有 volatile 成员的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8564482/

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