问题标签 [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.
lambda - Hazelcast IAtomicReference.alter lambda
我正在尝试根据现有缓存填充另一个原子引用。我想使用 lambdas 来简化代码(需要更少的锅炉代码),但它似乎不起作用。
这有效:
当我切换到下面的 lambda 语法时,它会给出序列化错误:
错误
com.hazelcast.nio.serialization.HazelcastSerializationException: Failed to serialize 'com.portal.objects.ObjectGraphEntryListener$$Lambda$61/1840645556'
有没有人让它与 lambdas 一起工作?
java - Hibernate @Enumerated 为 AtomicReference
我有一个使用 Hiberante 进行数据库操作的类,并且需要它是线程安全的。我正在尝试重构代码以使用原子变量及其操作,而不是由于锁定而使用同步方法,因为由于大量请求的性能缓慢(很多线程正在运行)而导致应用程序中断,但我是由于异常,使用 @Enumeration 重构为 AtomicReference 的变量存在问题:
属性 [com.gateway.domain.ImportTypeDetail.importFrequency] 被注释为枚举,但其 java 类型不是枚举 [java.util.concurrent.atomic.AtomicReference]
重构前的代码:
我重构为:
是否可以在场景中实现 AtomicReference?仅 EnumType 选项分别ORDINAL
用于STRING
类型属性或整数和类型属性或字符串。
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 类(请看一下put
和put2
方法):
ConcurrentMap(AtomicMap的实现)
java - Java AtomicReference#getAndSet 的用例是什么?
Java 的用例是什么AtomicReference#getAndSet
?换句话说,如果AtomicReference
我在我的代码中使用的唯一方法是AtomicReference#getAndSet
,那么我根本不需要AtomicReference
,只是一个volatile
变量就足够了,这是正确的假设吗?
例如,如果我有下一个代码:
, 是不是总是和
从调用者的角度来看?
c++ - 使用 std::atomic_ref 正确使用 volatile
我很难理解std::atomic_ref<int>
with的正确用法volatile
。
天真地存在三种可能性:
我们何时以及何时使用每一个?我感兴趣的用例是 MMIO。
java - 如果我们为它分配一个返回某个数组的函数,AtomicReference 的值是否会被延迟设置?
我有这段代码:
在哪里
当然,这是一个非常糟糕的例子,但我试图通过添加延迟来模仿我的真实测试用例。我的问题是,由于 someFunc() 立即返回数组,并且数组元素填充在不同的线程中,但是我们得到的结果存储在 AtomicReference 中,直到稍后我们才得到值,所以延迟我添加主函数超过了新线程产生的延迟。我返回的数组是否会填充所有元素?
java - AtomicReference.compareAndSet(old,new) 是否保证 old.field 没有改变?
是否AtomicReference.compareAndSet(old,new)
保证
old.field
没有改变吗?- 或者它只是保证
old
没有重新分配给新对象?
如果 2 为真,是否意味着AtomicReference
仅对不可变对象有用String
?(因为在更改的可变性的情况old
下成功old.field
丢失) compareAndSet
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 吗?
java - 以线程安全的方式从数据库中读取数据
在我的应用程序中,我有一个“Manager”类,它引用了一个 DAO 类,该类从 DB 加载数据并将 HashMap 填充为缓存解决方案。
这是一个片段
这段代码在多线程环境中工作,这里的问题是StampedLock
在这种情况下使用 OVERKILL 因为大部分时间它执行 READ 操作,并且偶尔从 DB 进行简单加载并分配给类成员。
我正在考虑删除StampedLock
并改用 simple AtomicReference<Map<Long, User>>
,这样大多数时候它会变得很简单get
,偶尔会使用set
.
你怎么看??
java - 以原子方式将新字符连接到 StringBuilder 对象
我的问题是:
我有课:
我需要同时原子地向 StringBuilder 添加新字符。但问题是,这个对象中只能有最后 128 个字符。我不能使用 StringBuffer,因为操作应该是非阻塞的。
所以,有两个操作:
首先:检查 StringBuilder 是否已经有 128 个字符。
第二:如果没有 -> 添加新字符,如果有 -> 删除第一个字符并添加新字符。
有没有办法使这两个或三个操作原子化?
我做了这个方法,但它不起作用:
为了测试我创建了这个方法:
这不是一个真正的问题,我可以用其他任何可行的方法来更改 AtomicReference。任务是创建无锁且没有竞争条件的操作