首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThreadLocalRandom或AtomicInteger

ThreadLocalRandom或AtomicInteger
EN

Stack Overflow用户
提问于 2015-07-14 17:39:34
回答 1查看 372关注 0票数 1

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 17:52:37

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31413614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档