zoukankan      html  css  js  c++  java
  • 关于 ThreadLocalRandom 随机数生成器

    ThreadLocalRandom 线程安全随机数获取。

    示例随机整数:java.util.concurrent.ThreadLocalRandom.current().nextInt();

    线程Thread类中的三个变量:threadLocalRandomSeed、threadLocalRandomProbe、threadLocalRandomSecondarySeed

    图1

    这三个字段是由ThreadLocalRandom来管理的,用以创建并发应用中的高性能伪随机数生成器。

    ThreadLocalRandom current() 获取当前实例:涉及sun.misc.Unsafe类的使用

    图2

    ThreadLocalRandom 静态域:SEED、PROBE初始化

    图3

    SEED、PROBE通过Unsafe实例从当前线程获取。也就是图1中的三个字段。

    当当前线程ThreadLocalRandom为0时,也就是未初始化过,则通过Unsafe进行初始化。

    图4 

    probeGenerator、seeder皆为原子型变量

    图5 

    获取新值后,通过Unsafe放入当前线程。

    附注:关于 sun.misc.Unsafe

    Unsafe提供了一系列更底层的访问操作方法,当然这是不安全的。所谓不安全,即不当应用容易导致非预期异常。

    直接的内存操作 + 直接的对象操作

  • 相关阅读:
    EL表达式 (详解)
    宜信面试整理
    Java 合并两个排序数组
    动态规划初识(爬楼梯问题)
    二叉树的最小深度
    ElasticSearch 单字符串多字段查询评分问题
    ES 分词
    汽车之家 面试总结
    浪潮之巅读书笔记
    闲徕互娱 面试总结
  • 原文地址:https://www.cnblogs.com/niejunlei/p/12731429.html
Copyright © 2011-2022 走看看