`

jdk7多线程下产生随机数ThreadLocalRandom

    博客分类:
  • java
 
阅读更多

API:   java.util.concurrent.ThreadLocalRandom  

 

 

Java 7之前我们使用Math.random()产生随机数,使用原子变量来保存当前的种子,这样两个线程同时调用序列时得到的是伪随机数,而不是相同数量的两倍。

ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。ThreadLocalRandom不是直接用new实例化,而是第一次使用其静态方法current()。

从Math.random()改变到ThreadLocalRandom有如下好处:

我们不再有从多个线程访问同一个随机数生成器实例的争夺。

取代以前每个随机变量实例化一个随机数生成器实例,我们可以每个线程实例化一个。

代码改变如下:

// double u = r.nextDouble();
double u = ThreadLocalRandom.current().nextDouble();

 

正如StringBuffer和StingBuilder一样,通过将线程安全放入其初始化部分,而不是在使用阶段,这就能够得到性能提升,另外一个例子是ThreadLocal和synchronized,synchronized是在代码使用时加上同步,而使用ThreadLocal是每个线程一个实例,避免使用共享要引入同步。

分享到:
评论

相关推荐

    jdk-7u71-windows-i586[32位]

    - **ThreadLocalRandom 类**:为每个线程提供独立的随机数生成器,提高了并发程序中的性能。 #### 2.2 新的语言特性 - **Try-with-resources 语句**:简化了资源管理代码,自动关闭实现了`AutoCloseable`接口的资源...

    jdk1.8 64位官方正式版 jdk-8u45-linux-x64.tar.gz

    此外,`ThreadLocalRandom`类的引入提高了多线程环境下随机数生成的性能和安全性。 在日期和时间API上,Java 8用`java.time`包替换了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易用的API,如...

    JDK 11 API2020.zip

    - **`ThreadLocalRandom`的性能优化**:提高了多线程环境下随机数生成的效率。 - **`ForkJoinPool`的调整**:默认线程池大小由CPU核心数调整为`Math.max(1, Runtime.getRuntime().availableProcessors() - 1)`,更...

    jdk-18_macos-x64_bin, Mac jdk-18版本。

    4. **线程本地随机数生成器**:新增`ThreadLocalRandom`类,提供线程安全的高效随机数生成,减少了多线程环境下的竞争条件。 5. **增强的`ProcessHandle` API**:扩展了对进程信息的访问,包括进程的启动时间、用户...

    java中ThreadLocalRandom的使用详解

    ThreadLocalRandom是JDK 7中引入的一个类,用于解决多线程环境中Random类的性能瓶颈问题。 首先,我们来了解一下Random类的使用。Random类是java中生成随机数的常用方法,但是它不是线程安全的。在多线程环境中,...

    jdk1.8 中文版api

    JDK 1.8对并发编程的支持也有所增强,如`ForkJoinPool`和`RecursiveTask`用于并行计算,`ConcurrentHashMap`的性能提升,以及`ThreadLocalRandom`类的引入,提供了线程安全的随机数生成。 九、反射改进 反射API...

    jdk1.8_API 帮助文档 中文版.rar

    此外,还新增了默认的ThreadLocalRandom类,为多线程环境下的随机数生成提供了更好的性能。 二、新特性 1. Lambda表达式:这是Java 1.8最重要的新特性之一,它允许开发者以更简洁的形式定义匿名函数,提升了代码的...

    java伪随机数

    在这种情况下,可以考虑使用ThreadLocalRandom类,它是在JDK 1.7中引入的,为多线程环境下的随机数生成提供了一种更高效的机制。 7. 随机数池的使用:Java 8 引入了SplittableRandom类,该类是专门为并行算法设计的...

    jdk-15_windows-x64_bin -.rar

    8. **实验性线程局部变量API**:引入了一个新的实验性API `ThreadLocalRandom.current().nextLong(Long.MAX_VALUE)`,以提供高效的线程局部随机数生成。 安装JDK 15后,开发者可以通过修改系统环境变量`JAVA_HOME`...

    随机点名程序(java线程实现)

    总的来说,这个随机点名程序结合了Java Swing的GUI编程、多线程技术、随机数生成以及多媒体元素,展示了Java在开发桌面应用时的广泛功能和灵活性。对于学习Java编程的学生或开发者来说,这是一个很好的实践项目,...

    深入浅析Random类在高并发下的缺陷及JUC对其的优化

    ThreadLocalRandom类通过使用ThreadLocal变量来存储每个线程的私有Random实例,确保了在多线程环境下的独立性。每个线程都有自己的种子,不会因其他线程的影响而产生重复的随机数。ThreadLocalRandom不仅解决了并发...

    jdk 源码 保护 sun com.sum nio misc 等 rc.jar 中的源码

    例如,`java.util.concurrent_misc`包中的`AtomicInteger`、`ThreadLocalRandom`等,都是并发编程和随机数生成的重要工具。分析这些类的源码有助于我们理解线程安全和高效计算的实现。 总的来说,JDK源码的深入研究...

    Java-Codes:用Java编写的随机程序

    例如,`ThreadLocalRandom`对于多线程环境更高效且避免了同步问题,而Apache Commons Math库则提供了更复杂的分布,如正态分布、泊松分布等。 通过研究这个压缩包中的代码,你可以学到以下几点: 1. 如何创建`...

Global site tag (gtag.js) - Google Analytics