我需要在多个线程中生成非重叠数字(随机或增量无关紧要,因为每个生成的数字都是唯一的)。我想我有两个选择
我需要非常快,而且所有线程中的数字都应该是唯一的。哪一个更好?
答案 0 :(得分:3)
选项1将会变慢,因为AtomicInteger
通过使用volatile int
提供线程安全 - 意味着修改或读取必须始终从RAM中读取/写入,这将总是比在处理器的高速缓冲存储器中读/写慢。
选项2可能更快(取决于计算序列中下一个数字与内存提取所花费的时间),但您冒着随机生成重复数字的风险(尽管很小)。
我可以建议第三种选择吗?使用具有预定义范围的本地int
或long
线程。您不必担心缓存一致性,因为只有一个线程可以访问您存储的每个原始计数器。你仍然存在环绕的风险,但你会确切地知道它何时发生,而不像在随机数字序列上运行重复的风险。