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是每个线程一个实例,避免使用共享要引入同步。
相关推荐
- **ThreadLocalRandom 类**:为每个线程提供独立的随机数生成器,提高了并发程序中的性能。 #### 2.2 新的语言特性 - **Try-with-resources 语句**:简化了资源管理代码,自动关闭实现了`AutoCloseable`接口的资源...
此外,`ThreadLocalRandom`类的引入提高了多线程环境下随机数生成的性能和安全性。 在日期和时间API上,Java 8用`java.time`包替换了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易用的API,如...
- **`ThreadLocalRandom`的性能优化**:提高了多线程环境下随机数生成的效率。 - **`ForkJoinPool`的调整**:默认线程池大小由CPU核心数调整为`Math.max(1, Runtime.getRuntime().availableProcessors() - 1)`,更...
4. **线程本地随机数生成器**:新增`ThreadLocalRandom`类,提供线程安全的高效随机数生成,减少了多线程环境下的竞争条件。 5. **增强的`ProcessHandle` API**:扩展了对进程信息的访问,包括进程的启动时间、用户...
ThreadLocalRandom是JDK 7中引入的一个类,用于解决多线程环境中Random类的性能瓶颈问题。 首先,我们来了解一下Random类的使用。Random类是java中生成随机数的常用方法,但是它不是线程安全的。在多线程环境中,...
JDK 1.8对并发编程的支持也有所增强,如`ForkJoinPool`和`RecursiveTask`用于并行计算,`ConcurrentHashMap`的性能提升,以及`ThreadLocalRandom`类的引入,提供了线程安全的随机数生成。 九、反射改进 反射API...
此外,还新增了默认的ThreadLocalRandom类,为多线程环境下的随机数生成提供了更好的性能。 二、新特性 1. Lambda表达式:这是Java 1.8最重要的新特性之一,它允许开发者以更简洁的形式定义匿名函数,提升了代码的...
在这种情况下,可以考虑使用ThreadLocalRandom类,它是在JDK 1.7中引入的,为多线程环境下的随机数生成提供了一种更高效的机制。 7. 随机数池的使用:Java 8 引入了SplittableRandom类,该类是专门为并行算法设计的...
8. **实验性线程局部变量API**:引入了一个新的实验性API `ThreadLocalRandom.current().nextLong(Long.MAX_VALUE)`,以提供高效的线程局部随机数生成。 安装JDK 15后,开发者可以通过修改系统环境变量`JAVA_HOME`...
总的来说,这个随机点名程序结合了Java Swing的GUI编程、多线程技术、随机数生成以及多媒体元素,展示了Java在开发桌面应用时的广泛功能和灵活性。对于学习Java编程的学生或开发者来说,这是一个很好的实践项目,...
ThreadLocalRandom类通过使用ThreadLocal变量来存储每个线程的私有Random实例,确保了在多线程环境下的独立性。每个线程都有自己的种子,不会因其他线程的影响而产生重复的随机数。ThreadLocalRandom不仅解决了并发...
例如,`java.util.concurrent_misc`包中的`AtomicInteger`、`ThreadLocalRandom`等,都是并发编程和随机数生成的重要工具。分析这些类的源码有助于我们理解线程安全和高效计算的实现。 总的来说,JDK源码的深入研究...
例如,`ThreadLocalRandom`对于多线程环境更高效且避免了同步问题,而Apache Commons Math库则提供了更复杂的分布,如正态分布、泊松分布等。 通过研究这个压缩包中的代码,你可以学到以下几点: 1. 如何创建`...