java中ThreadLocalRandom的使用详解
导读:本文共1946.5字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 在java中我们通常会需要使用到java.util.Random来便利的生产随机数。但是Random是线程安全的,如果要在线程环境中的话就有可能产生性能瓶颈。我们以Random中常用的nextInt方法为例来具体看一下: public int nextInt() { return next(32); }nextInt方法实际上调用了下... ...
目录
(为您整理了一些要点),点击可以直达。在java中我们通常会需要使用到java.util.Random来便利的生产随机数。但是Random是线程安全的,如果要在线程环境中的话就有可能产生性能瓶颈。
我们以Random中常用的nextInt方法为例来具体看一下:
nextInt方法实际上调用了下面的方法:
从代码中我们可以看到,方法内部使用了AtomicLong,并调用了它的compareAndSet方法来保证线程安全性。所以这个是一个线程安全的方法。
其实在多个线程环境中,Random根本就需要共享实例,那么该怎么处理呢?
在JDK 7 中引入了一个ThreadLocalRandom的类。ThreadLocal大家都知道就是线程的本地变量,而ThreadLocalRandom就是线程本地的Random。
我们看下怎么调用:
我们来为这两个类分别写一个benchMark测试:
分析运行结果,我们可以看出ThreadLocalRandom在多线程环境中会比Random要快。
本文的例子可以参考https://github.com/ddean2009/learn-java-concurrency/tree/master/ThreadLocalRandom
到此这篇关于java中ThreadLocalRandom的使用详解的文章就介绍到这了,更多相关java ThreadLocalRandom内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
java中ThreadLocalRandom的使用详解的详细内容,希望对您有所帮助,信息来源于网络。