java 线程分配_Java多线程原子引用分配

我有一个缓存,该缓存是使用Simeple HashMap实现的。喜欢 -

HashMap cache = new HashMap();

大部分时间都使用此缓存从中读取值。我有另一个重新加载缓存的方法,在这个方法的内部,我基本上创建了一个新的缓存,然后分配了引用。据我了解,对象引用的分配是Java中的Atomic。

public class myClass {

private HashMap cache = null;

public void init() {

refreshCache();

}

// this method can be called occasionally to update the cache.

public void refreshCache() {

HashMap newcache = new HashMap();

// code to fill up the new cache

// and then finally

cache = newcache; //assign the old cache to the new one in Atomic way

}

}

我了解,如果我不将缓存声明为易失性,则其他线程将无法看到更改,但是对于我的用例而言,将缓存中的更改传播到其他线程不是时间紧迫的,它们可以继续使用旧缓存延长时间。

您看到任何线程问题吗?考虑到许多线程正在从高速缓存中读取数据,并且仅在重新加载高速缓存时才读取。

编辑-我的主要困惑是我不必在这里使用AtomicReference,因为赋值操作本身是原子的?

编辑-

我知道要使排序正确,我应该将缓存标记为易失性。但是,如果将refreshCache方法标记为已同步,则不必使高速缓存为易失性,因为已同步块将同时处理顺序和可见性?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值