问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ThreadLocalRandom到底要怎么用

发布网友 发布时间:2022-05-03 01:27

我来回答

1个回答

热心网友 时间:2022-06-29 01:51

ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。ThreadLocalRandom不是直接用new实例化,而是第一次使用其静态方法current()。
从Math.random()改变到ThreadLocalRandom有如下好处:
我们不再有从多个线程访问同一个随机数生成器实例的争夺。
取代以前每个随机变量实例化一个随机数生成器实例,我们可以每个线程实例化一个。
代码改变如下:
// double u = r.nextDouble();
double u = ThreadLocalRandom.current().nextDouble();
性能对比
使用Math.random()的结果如下:
StopWatch 'Monte Carlo NPV': running time (millis) = 44637
-----------------------------------------
ms % Task name
-----------------------------------------
12202 027% Sequential
02576 006% DivideByTwo (children=2, min fork size=100)
02465 006% DivideByTwo (children=2, min fork size=500)
02615 006% DivideByTwo (children=2, min fork size=1000)
02515 006% DivideByTwo (children=2, min fork size=2000)
02502 006% DivideByP (children=8, min fork size=100)
02490 006% DivideByP (children=8, min fork size=500)
02445 005% DivideByP (children=8, min fork size=1000)
02450 005% DivideByP (children=8, min fork size=2000)
02477 006% Sqrt(n) (children=-1, min fork size=100)
02458 006% Sqrt(n) (children=-1, min fork size=500)
02466 006% Sqrt(n) (children=-1, min fork size=1000)
02468 006% Sqrt(n) (children=-1, min fork size=2000)
02508 006% Parfor (children=20000, min fork size=500)
使用ThreadLocalRandom.current().nextDouble()结果:
StopWatch 'Monte Carlo NPV': running time (millis) = 34942
-----------------------------------------
ms % Task name
-----------------------------------------
11347 032% Sequential
02004 006% DivideByTwo (children=2, min fork size=100)
01831 005% DivideByTwo (children=2, min fork size=500)
01838 005% DivideByTwo (children=2, min fork size=1000)
01784 005% DivideByTwo (children=2, min fork size=2000)
01781 005% DivideByP (children=8, min fork size=100)
01782 005% DivideByP (children=8, min fork size=500)
01772 005% DivideByP (children=8, min fork size=1000)
01776 005% DivideByP (children=8, min fork size=2000)
01781 005% Sqrt(n) (children=-1, min fork size=100)
01788 005% Sqrt(n) (children=-1, min fork size=500)
01805 005% Sqrt(n) (children=-1, min fork size=1000)
01799 005% Sqrt(n) (children=-1, min fork size=2000)
01854 005% Parfor (children=20000, min fork size=500)
足足提高了25%。
正如StringBuffer和StingBuilder一样,通过将线程安全放入其初始化部分,而不是在使用阶段,这就能够得到性能提升,另外一个例子是ThreadLocal和synchronized,synchronized是在代码使用时加上同步,而使用ThreadLocal是每个线程一个实例,避免使用共享要引入同步。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 Java:ThreadLocal究竟有什么用呢?费解 java面试 1,什么是threadlocal类,怎么使用它 Java中的ThreadLocal通常是在什么情况下使用的 java中的threadlocal是怎么用的 ThreadLocal的使用方法 毛豆的营养是什`么? 在excel中,数字与数字合计之后的数据下拉小数点后出现4位数之多的数字,而且合计后的数字也不准确 excel表格数据加和结果小数点不准确 这是为什么 比如一列的合计是6121.91 可显示的是6121.93 这应该怎么办 毛豆有营养吗 ? excel表格求和时,小数点后的尾数为何会不对? 鉴别月季花品种 网上那些好看的多色月季,是天生这样的吗? 国网移动考场单位报名考试怎么登录 无法加载 mysql 扩展,请检查您的 PHP 配置 异地身份证丢失怎么办?需要怎么做 国家电网考试是在哪里报名啊? 外地可以挂失身份证吗 观察郭全中:你有多专业,世界就会给你多大的舞台 违章通知是什么号码发短信来 阿里巴巴收购优酷土豆利好哪些股票 请教一下,Java局部变量为什么一定要用ThreadLocal? 为什么头顶头发稀少,男性头顶头发稀少怎么办 男朋友头顶头发很少怎么办 男性头顶头发稀少怎么办 15岁男孩头顶头发稀少怎么办?? 28岁男头顶头发越来越少怎么治疗 怎么通过qq注册新 去过西二旗充值点他们说不能充。小学生的学生卡什么地方能充值? 北京市中小学学生卡怎么充钱? 求助!关于 北京市中小学学生卡 北京市中小学学生卡,可以在地铁里面充值吗?谢谢!急! centos 6.4 php 怎么开msyql扩展 自考生能否考取幼师资格证 qq怎么申请注册 我是上海市的 自考幼师资格证 需要准备些什么。原本无基础 上海市自考幼师证需要考哪几门课?上海市下半年报名大概是什么时候? 我是上海的,想在2012年11月11日参加教师资*,请问自考《幼师资格证》的学习材料有哪些? 如何用qq号申请? 上海幼师自考问题。 知道的进来 急急急 我是上海在校大专生,想自学,考幼师资格证,问问哪里的培训班比较好。