JUC包中的分而治之策略-为提高性能而生( 十 )

那么如果每个线程维护自己的一个种子变量 , 每个线程生成随机数时候根据自己本地内存中的老的种子计算新的种子 , 并使用新种子更新老的种子 , 然后根据新种子计算随机数 , 就不会存在竞争问题 , 这会大大提高并发性能 , 如下图ThreadLocalRandom原理可以使用下图表达:

Thread类里面有几个变量:

思考问题:

  • 每个线程的初始种子怎么生成的

  • 如果保障多个线程产生的种子不一样

四、总结

本文是对拙作 java并发编程之美 一书中有关章节的提炼 。 本次分享首先讲解了AtomicLong的内部实现 , 以及存在的缺点 , 然后讲解了 LongAdder采用分而治之的策略通过使用多个原子变量减小单个原子变量竞争的并发度 。 然后简单介绍了Random , 和其缺点 , 最后介绍了ThreadLocalRandom借用ThreadLocal的思想解决了多线程对同一个原子变量竞争锁带来的性能损耗 。 其实JUC包中还有其他一些经典的组件 , 比如fork-join框架等 。

推荐阅读