我需要在多线程中生成不重叠的数字(随机的或增量的,因为每个生成的数字都是唯一的)。我想我有两个选择
我需要这是非常快,而且数字应该是唯一的所有线程。哪一个更好?
发布于 2015-07-14 17:52:37
选项1要慢一些,因为AtomicInteger通过使用volatile int提供线程安全--这意味着修改或读取必须始终从/写到RAM,这将总是比在处理器的缓存内存中读取/写入慢。
选项2可能更快(取决于计算序列中的下一个数字相对于内存获取所用的时间),但是您会冒随机生成重复数字的风险(尽管风险很小)。
我可以建议第三种选择吗?使用具有预定义范围的线程本地int或long。您不必担心缓存的一致性,因为只有一个线程可以访问存储的每个原始计数器。你仍然面临着环绕的风险,但是你会知道它发生的确切时间,不像在随机数序列上遇到重复的风险。
https://stackoverflow.com/questions/31413614
复制相似问题