问题标签 [atomicreference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
102 浏览

lambda - Hazelcast IAtomicReference.alter lambda

我正在尝试根据现有缓存填充另一个原子引用。我想使用 lambdas 来简化代码(需要更少的锅炉代码),但它似乎不起作用。

这有效:

当我切换到下面的 lambda 语法时,它会给出序列化错误:

错误
com.hazelcast.nio.serialization.HazelcastSerializationException: Failed to serialize 'com.portal.objects.ObjectGraphEntryListener$$Lambda$61/1840645556'

有没有人让它与 lambdas 一起工作?

ObjectGraphEntryListener

hazelcast.xml

0 投票
0 回答
59 浏览

java - Hibernate @Enumerated 为 AtomicReference

我有一个使用 Hiberante 进行数据库操作的类,并且需要它是线程安全的。我正在尝试重构代码以使用原子变量及其操作,而不是由于锁定而使用同步方法,因为由于大量请求的性能缓慢(很多线程正在运行)而导致应用程序中断,但我是由于异常,使用 @Enumeration 重构为 AtomicReference 的变量存在问题:

属性 [com.gateway.domain.ImportTypeDetail.importFrequency] 被注释为枚举,但其 java 类型不是枚举 [java.util.concurrent.atomic.AtomicReference]

重构前的代码:

我重构为:

是否可以在场景中实现 AtomicReference?仅 EnumType 选项分别ORDINAL用于STRING类型属性或整数和类型属性或字符串。

0 投票
0 回答
110 浏览

java - AtomicReference#compareAndSet 阻塞了主线程,我应该使用同步吗?

我使用 AtomicReference 构建了原子映射、集合和列表类的集合。我遇到了一个问题,即AtomicReference#compareAndSet每秒调用约 20 次时存在严重滞后。(AtomicSet 不会导致任何延迟,但这只是因为如果它已经包含对象,它就不会调用 compareAndSet)

如果我注释掉该方法并简单地添加synchronized到该方法中,滞后就会消失,但这是一个有效的替代品吗?我是否过度设计了一些我不需要的东西?

我尝试了一堆不同的方法布局组合,我只获取当前地图并创建一个新的修改地图,然后重复调用compareAndSet直到它返回 true,仍然滞后。我也试过只打电话AtomicReference#set一次,这也很滞后。

摘要:我的AtomicReference#compareAndSet调用陷入了主线程,我正在寻找我是否完全滥用了 AtomicReference,应该使用synchronized或修复我的代码(如果有的话)。

对于上下文,我在 Minecraft Sponge Mixin 注入中运行以下代码。它所做的只是在定义的方法的底部注入我的 java 代码(它似乎以 Minecraft 滴答速度运行,每秒 20 次):

这是有问题的 AtomicMap 类(请看一下putput2方法):

ConcurrentMap(AtomicMap的实现)

0 投票
1 回答
145 浏览

java - Java AtomicReference#getAndSet 的用例是什么?

Java 的用例是什么AtomicReference#getAndSet?换句话说,如果AtomicReference我在我的代码中使用的唯一方法是AtomicReference#getAndSet,那么我根本不需要AtomicReference,只是一个volatile变量就足够了,这是正确的假设吗?

例如,如果我有下一个代码:

, 是不是总是和

从调用者的角度来看?

0 投票
1 回答
64 浏览

c++ - 使用 std::atomic_ref 正确使用 volatile

我很难理解std::atomic_ref<int>with的正确用法volatile

天真地存在三种可能性:

我们何时以及何时使用每一个?我感兴趣的用例是 MMIO。

0 投票
2 回答
65 浏览

java - 如果我们为它分配一个返回某个数组的函数,AtomicReference 的值是否会被延迟设置?

我有这段代码:

在哪里

当然,这是一个非常糟糕的例子,但我试图通过添加延迟来模仿我的真实测试用例。我的问题是,由于 someFunc() 立即返回数组,并且数组元素填充在不同的线程中,但是我们得到的结果存储在 AtomicReference 中,直到稍后我们才得到值,所以延迟我添加主函数超过了新线程产生的延迟。我返回的数组是否会填充所有元素?

0 投票
1 回答
34 浏览

java - AtomicReference.compareAndSet(old,new) 是否保证 old.field 没有改变?

是否AtomicReference.compareAndSet(old,new)保证

  1. old.field没有改变吗?
  2. 或者它只是保证old没有重新分配给新对象?

如果 2 为真,是否意味着AtomicReference仅对不可变对象有用String?(因为在更改的可变性的情况old成功old.field丢失) compareAndSet

0 投票
0 回答
45 浏览

java - 使用 UnaryOperator 更新参数化类型 AtomicReference,它会失去其线程安全属性吗?

可以说我有下一个方法:

其中 memory 是一个 volatile X 变量;

为了更新 XI 可以设置 X(X x),我已经有一个选项。但我还需要从内部“重新映射”它,同时是超轻量级(我不想使用 AtomicReference)。

另一种选择是......,而不是 UnaryOperator,使用消费者,当然要求是消费者中定义的任何操作都不能同时完成......

那么如果该方法的目标是 AtomicReference,其思想是 Memory 作为 ligthweigth 类,没有完整的线程安全属性,那么它可以继承它们吗?:

在这种情况下,“重新映射”将是有益的,但这this.memory = update.apply(this.memory);并没有给我任何信心。

我假设 .getMemory().get() 的线程(第二个 get() 来自 AtomicReference 本身)对内存的引用,在执行 remap() 时会丢失原子属性,因为“ =" 操作数重新分配 volatile X 变量...

我应该使用 Consumer 而不是 UnaryOperator 吗?

0 投票
0 回答
64 浏览

java - 以线程安全的方式从数据库中读取数据

在我的应用程序中,我有一个“Manager”类,它引用了一个 DAO 类,该类从 DB 加载数据并将 HashMap 填充为缓存解决方案。

这是一个片段

这段代码在多线程环境中工作,这里的问题是StampedLock在这种情况下使用 OVERKILL 因为大部分时间它执行 READ 操作,并且偶尔从 DB 进行简单加载并分配给类成员。

我正在考虑删除StampedLock并改用 simple AtomicReference<Map<Long, User>>,这样大多数时候它会变得很简单get,偶尔会使用set.

你怎么看??

0 投票
1 回答
56 浏览

java - 以原子方式将新字符连接到 StringBuilder 对象

我的问题是:

我有课:

我需要同时原子地向 StringBuilder 添加新字符。但问题是,这个对象中只能有最后 128 个字符。我不能使用 StringBuffer,因为操作应该是非阻塞的。

所以,有两个操作:

首先:检查 StringBuilder 是否已经有 128 个字符。

第二:如果没有 -> 添加新字符,如果有 -> 删除第一个字符并添加新字符。

有没有办法使这两个或三个操作原子化?

我做了这个方法,但它不起作用:

为了测试我创建了这个方法:

这不是一个真正的问题,我可以用其他任何可行的方法来更改 AtomicReference。任务是创建无锁且没有竞争条件的操作