gpt4 book ai didi

java - 赋值和函数值计算是原子操作吗?

转载 作者:行者123 更新时间:2023-11-30 06:34:28 27 4
gpt4 key购买 nike

我想知道函数值的计算和结果赋值给变量是否是Java中的原子操作。

例如:

我有一个线程安全的优先队列q。在 q 中,我保存了元素,每个元素都有一个 rank ,它根据它被放置在队列中。此外,我还有一个共享变量 topRank,它应该始终包含 q 中最顶层元素的排名。以下代码按线程数并行执行:

element = q.remove(); // do something with element
topRank = q.peek();

threadA 是否会从 q 中删除一个元素并计算 q.peek() 的值,并且在将其分配给 topRank 之前> 会被 threadB 中断,然后 threadB 会从 q 中再移除一个元素并更新 topRank。然后 threadA 将继续为 topRank 分配不正确的值。

非常感谢官方文献的链接。

谢谢。

最佳答案

简短的回答是这些操作不是原子的,您需要将同步写入您的代码。这是一个很大的话题,关于编写线程安全程序有很多东西需要学习。 Google 搜索“java 线程安全”和“java 多线程”。

关于java - 赋值和函数值计算是原子操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919124/

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