Tag: compare and swap

是否适合使用AtomicReference.compareAndSet来设置对数据库调用结果的引用?

我正在实现一个简单的缓存,缓存存储为AtomicReference。 private AtomicReference<Map> cacheData; 应该从数据库表中填充(延迟)缓存对象。 我提供了一种方法来将缓存数据返回给调用者,但如果数据为空(即未加载),则代码需要从数据库加载数据。 为避免同步我想到使用compareAndSet()方法: public Object getCacheData() { cacheData.compareAndSet(null, getDataFromDatabase()); // atomic reload only if data not set! return Collections.unmodifiableMap(cacheData.get()); } 以这种方式使用compareAndSet是否可以。 将数据库调用作为primefaces操作的一部分? 是否比同步方法更好/更差? 非常感谢任何建议..

为什么要使用双重锁定?

我继续运行使用双重检查锁定的代码,我仍然对它为什么会被使用感到困惑。 我最初不知道双重检查锁定是否被打破 ,当我学会它时,它为我放大了这个问题:为什么人们首先使用它? 是不是比较和交换更好? if (field == null) Interlocked.CompareExchange(ref field, newValue, null); return field; (我的问题同时适用于C#和Java,尽管上面的代码是针对C#的。) 与primefaces操作相比,双重检查锁定是否具有某种固有的优势?