gpt4 book ai didi

java - 同时刷新缓存

转载 作者:行者123 更新时间:2023-11-30 07:12:30 25 4
gpt4 key购买 nike

假设我有一个名为 MyCache 的 Java Bean,它有多个 getter 和 setter。我的应用程序中有一个 MyCache 实例。它是 MyCacheHolder 中的 volatile 字段 myCache。当我需要刷新 MyCache 时,我会创建它的新副本(这需要时间),然后我只需将引用 myCache 分配给这个新对象。

许多线程正在同时读取MyCacheHolder#myCache。他们肯定会获得最新的引用,因为它是 volatile 。但我不确定他们是否获得了完全初始化的对象。该对象是通过 setter 初始化的。读取线程是否有可能看不到 myCache 的所有字段?如果是的话我该如何修复它?

最佳答案

使字段 myCache volatile 不足以使其线程安全,您还需要通过以下任一方式使类 MyCache 线程安全同步对 getter 和 setter 的访问或使 MyCache 不可变(其所有非静态字段必须是 final 并且本身不可变)。对我来说,最好的解决方案是使类不可变,因为一旦创建的实例的状态无法更改,就可以由任意数量的线程访问它,而无需同步对其任何字段的访问。

关于java - 同时刷新缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39002326/

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