gpt4 book ai didi

java - ThreadLocalRandom 或 AtomicInteger

转载 作者:行者123 更新时间:2023-11-29 05:03:03 25 4
gpt4 key购买 nike

我需要在多个线程中生成非重叠数字(随机或增量无关紧要,因为每个生成的数字都是唯一的)。我想我有两个选择

  1. 使用 AtomicInteger 并在所有线程之间共享
  2. 为每个线程使用具有不同开始和结束范围的 ThreadLocalRandom

我需要它非常快,而且所有线程中的数字应该是唯一的。哪个更好?

最佳答案

选项 1 会更慢,因为 AtomicInteger 通过使用 volatile int 提供线程安全 - 意味着修改或读取必须始终从/write 到 RAM,这总是比在处理器的缓存内存中读/写慢。

选项 2 可能更快(取决于计算序列中的下一个数字与内存获取所需的时间),但您冒着随机生成重复数字的风险(尽管很小)。

我可以建议第三种选择吗?使用具有预定义范围的线程局部 intlong。您不必担心缓存一致性,因为只有一个线程可以访问您存储的每个原始计数器。您仍然面临环绕的风险,但您会确切知道它何时发生,这与在随机数序列上遇到重复项的风险不同。

关于java - ThreadLocalRandom 或 AtomicInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31413614/

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