Random和ThreadLocalRandom的使用建议

Random和ThreadLocalRandom的使用建议java util Random 从 Java1 0 开始就存在了 它是一个线程安全类 理论上可以通过它同时在多个线程中获得互不相同的随机数 其线程安全是通过 AtomicLong 实现的 但是从 JDK 1

大家好,欢迎来到IT知识分享网。

java.util.Random 从Java1.0开始就存在了。它是一个线程安全类,理论上可以通过它同时在多个线程中获得互不相同的随机数,其线程安全是通过AtomicLong实现的。但是从JDK 1.7开始,Random的Javadoc中多了这么一句:Instances of java.util.Random are threadsafe. However, the concurrent use of the same java.util.Random instance across threads may encounter contention and consequent poor performance. Consider instead using ThreadLocalRandom in multithreaded designs.

Random 使用 AtomicLong CAS (compare-and-set)操作来更新它的seed,CAS在资源高度竞争时的表现很糟糕。最著名的传闻是CAS需要锁总线,因此CAS指令不但慢而且会严重影响系统并发度。

在Java1.7开始,使用ThreadLocalRandom类代替。这个类实际上使得同一个线程使用同一个Random实例,而不同的线程使用不同的Random实例。使用方法:ThreadLocalRandom.current().nextXXX(); /// XXX代表可选的类型,例如Int等等。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/161421.html

(0)
上一篇 2024-12-09 15:26
下一篇 2024-12-09 15:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信