问题标签 [atomicinteger]
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.
multithreading - 将 AtomicInteger 与 JMH 多线程一起使用?
我正在使用 JMH 来测试我的项目的一些功能。当我尝试将 @GroupThreads 与 AtomicInteger 一起使用时,我无法重置 AtomicInteger,它只会随着时间的推移而增加。我还尝试使用 if else 检查和重置 AtomicInteger 但不能。你能给我一些关于我的问题的建议吗?非常感谢。
java - 包含 AtomicInteger 的类的对象无法使用 GSON 转换为 JSON
我正在尝试序列化一个类对象(比如说 MyClass)
这是 MyClass.java 的大致样子:
我正在尝试使用 GSON 将上述类的对象转换为 JSON
这是代码:
但它会引发以下异常:
我不确定如何处理这个问题,因为 SO 和其他论坛上的大多数答案都要求制作变量 TRANSIENT,而这基本上不是我想要实现的想法。
java - 多线程中的 AtomicInteger
我想找出从 0 到 1000000 的所有素数。为此,我编写了这个愚蠢的方法:
这对我有好处,不需要任何编辑。比我写了以下代码:
请注意 (1) 和 (2) 标记的行。启用 (1) 时,程序运行速度快,但启用 (2) 时,运行速度较慢。
输出显示延迟较大的小部分
和线程获得相同的number
价值:
请解释一下为什么选项 (2) 更慢以及为什么尽管 AtomicInteger 多线程安全,线程的数字值相等?
java - 如何在 Java 中获取与 uint32_t 对应的唯一值?
我必须在 Java 中生成一个唯一编号(对于我运行代码的机器),以便在 C++ 中它可以对应于uint32_t
. 一般来说,其他 C++ 程序应该能够正确地读取这个唯一的数字作为uint32_t
. 我在一个字节数组中发送这个信息,其他 C++ 程序正在反序列化它以获得这个数字。到目前为止,我无法在 C++ 程序中更改此数字的数据类型。
所以我想出了上面的代码。在应用程序启动(初始化阶段)期间,我的setClientId
方法只会被调用一次:
- 如果这台机器是第一次运行代码,就像它是一台新机器,那么我将传递
0
给setClientId
方法。 - 如果这台机器已经在运行代码但我们重新启动了服务器,那么我将在数据库中查找这台机器最后保存的值是什么(因为我们也每隔几分钟将这个值保存在 db 中),然后我将传递它方法的价值
setClientId
。
然后稍后当我的程序运行时(在初始化之后),它将继续调用getClientId
方法来给我实际的唯一 clientId。
这是为我的机器生成uint32_t
用于 C++ 程序的唯一 ID 的正确方法吗?我还确保如果值达到Integer.MAX_VALUE
然后将其设置为 0 并重新开始。我必须这样做吗?或者我也可以为此取负值uint32_t
?
基本上,我想为我的机器生成一个唯一编号,该编号应始终对应于uint32_t
. 如果机器是新机器,我们可以从数字 0 开始(bcoz 当我们在数据库中查找这台机器的值时,不会有任何值,所以我们将从 0 开始)但是如果机器之前已经运行过这段代码,然后从数据库中最后保存的值开始。
java - While 内部的原子函数
有人可以向我解释一下这段代码吗?
我的意思是为什么我不能只更改此代码
至
? 我知道永远不会出现编译错误语句但是为什么
没有得到错误?是不是总是假的太对了?
或者为什么我不能清除那个while循环并返回“oldValue+1”?
谢谢并恭祝安康。
java - 如果对 int 变量的写入和读取是原子的,为什么需要 AtomicInteger?
我在Oracle 文档中读到:
- 对于引用变量和大多数 原始变量(除了 long 和 double 之外的所有类型),读取和写入都是原子的。
(我猜这个特性已经被添加到一些新的 JDK 版本中,因为我曾经认为所有原始变量的读/写都不是原子的)
这是否意味着AtomicInteger
已弃用且不应在新项目中使用?
java - 多线程和 AtomicInteger
我从关于原子的教程中获取了这段代码,它说:-
“通过使用 AtomicInteger 作为 Integer 的替代品,我们能够在线程安全的庄园中同时增加数字,而无需同步对变量的访问。方法 incrementAndGet() 是一个原子操作,因此我们可以安全地从多个线程。”
它说这将返回正确的结果,1000 但是没有一个实例达到 1000,它们通常要少得多,例如
怎么了 ?
java - 为什么 Java 8 提供 LongAccumulator 而不是 IntAccumulator?
目前,我的程序大量使用AtomicInteger
s 来跟踪并行报告的 int 的运行最大值。
在阅读了 Java 8 的 new 之后LongAccumulator
,我曾希望使用IntAccumulator
withmax
作为累加器函数,以便以更少的线程争用来完成我想要的行为。然而它似乎并不存在。
是否有某种原因IntAccumulator
没有意义?IntAdder
对我来说,可能存在不必要的低级指令似乎是合理的,但一个IntAccumulator
可能代表的行为比低级指令可以捕获的行为更多。
(如果它完全相关,我打算从 Scala 代码中使用这些)
java - Atomic Integer incrementAndGet() 线程安全吗?
Atomic Integer incrementAndGet() 方法线程安全吗?我没有看到任何使用 synchronized 关键字。我正在使用以下代码生成唯一 ID:
我想知道调用该方法以生成唯一 ID 的多个线程是否会导致任何问题。
谢谢!
java - Java 6 上的 AtomicInteger getAndUpdate 为零
我正在尝试使用计数器来检测通过 HTTP 方法发送的文本中唯一单词的数量。由于我需要确保此计数器值的并发性,我已将其更改为AtomicInteger
.
在某些情况下,我想获取计数器的当前值并将其重置为零。如果我理解正确的话,我一定不能像这样单独使用get()
andset(0)
方法,而是使用 getAndUpdate() 方法,但是!我不知道如何为此重置实现 IntUnaryOperator,甚至不知道是否可以在 Java 6 服务器上执行此操作。
谢谢你。