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

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

附加订阅

关于 ThreadLocalRandom 随机数生成器的更多相关文章

  1. Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom(转)

    文中的 Random即:java.util.Random,ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即 ...

  2. Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

    Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random,ThreadLocalRandom 即: ...

  3. [转]Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

     详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp84 Random即:java.util.Random, ThreadL ...

  4. 解密随机数生成器(二)——从java源码看线性同余算法

    Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...

  5. 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  6. 【BZOJ-3122】随机数生成器 BSGS

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1362  Solved: 531[Submit][Sta ...

  7. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  8. [BZOJ3671][UOJ#6][NOI2014]随机数生成器

    [BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...

  9. NOI2014 随机数生成器

    随机数生成器 [问题描述] 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的 ...

  10. 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1442  Solved: 552 Description ...

随机推荐

  1. 升级 vcpkg 遇到的一些坑

    项目上有个需求要用到 wil 库,于是打开 cmd 输入: vcpkg install wil:x86-windows-static 等了很久,一直卡在配置命令 连续试了好几遍,还是不行,安装其他的静 ...

  2. C++ 多线程的错误和如何避免(13)

    在 async 任务中抛出的异常会被 std::future::get() 触发 #include <future> #include <iostream> int main( ...

  3. Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线

    需求   使用QCustomPlot绘制多个目标的北斗运行轨迹图,包括累计绝对位置图和记录时刻的相对位置图.  当前绘制存在问题:    交付客户前,公司内部自测流程发现的问题.  实际预期效果为:  ...

  4. go最新版本1.15安装配置及编辑器2020.2版本goland

    下载 https://golang.google.cn/dl/ 配置 go env #查看是否安装成功 # 终端输入修改镜像地址 $ go env -w GO111MODULE=on $ go env ...

  5. 网络安全-Linux常用命令

    安装上传下载的软件包 yum install lrzsz -y 下载:linux-->windows sz -y /etc/hosts 上传:windows-->linux rz -y 系 ...

  6. 目标检测 - VOC - xml标注格式

    目标检测 - VOC - xml标注格式 相对其他计算机视觉任务,目标检测算法的数据格式更为复杂.为了对数据进行统一的处理,目标检测数据一般都会做成VOC或者COCO的格式. XML标注格式 < ...

  7. Java 关于变量的赋值

    1 /** 2 * 3 * @Description 4 * @author Bytezero·zhenglei! Email:420498246@qq.com 5 * @version 6 * @d ...

  8. JVM解析

    synize锁升级

  9. 磁盘 U盘找不到

    及磁盘找不到了, 第一步: 看排线是否插好,稳当 第二步:在磁盘管理下面,磁盘是否还在,如果磁盘显示在,只是没有磁盘符 第三步:diskpart ,进入磁盘  其他的命令自己 查询 第四步:进入 CM ...

  10. CUDA指针数组Kernel函数

    技术背景 在前面的一篇文章中,我们介绍了在C++中使用指针数组的方式实现的一个不规则的二维数组.那么如果我们希望可以在CUDA中也能够使用到这种类似形式的不规则的数组,有没有办法可以直接实现呢?可能过 ...