Prefer ThreadLocalRandom over Random】的更多相关文章

Java 7 has introduced a new random number generator - ThreadLocalRandom Normally to generate Random numbers, we either do Create an instance of java.util.Random OR Math.random() - which internally creates an instance of java.util.Random on first invo…
本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 随机数 随机数在科学研究与工程实际中有着极其重要的应用! 简单来说,随机数就是一个数列,这个数列可能满足一定的概率分布,又获取其满足的分布并不为我们所知. 数学方法产生随机数应该称之为"伪随机数",只有使用物理方法才能得到真正的随机数!因此我们使用计算机产生的随机数都是"伪随机数".那么计算机到底是怎么产生随机数的呢?这时就…
799 java里有伪随机型和安全型两种随机数生成器,伪随机生成器根据特定公式将seed转换成新的伪随机数据的一部分,安全随机生成器在底层依赖到操作系统提供的随机事件来生成数据. 安全随机生成器 需要生成加密性强的随机数据的时候才用它 生成速度慢 如果需要生成大量的随机数据,可能会产生阻塞需要等待外部中断事件 而伪随机生成器,只依赖于"seed"的初始值,如果给生成算法提供相同的seed,可以得到一样的伪随机序列.一般情况下,由于它是计算密集型的(不依赖于任何IO设备),因此生成速度更…
Random和ThreadLocalRandom类均用于生成伪随机数. Random的构造函数: Random()     默认以系统当前时间为种子,相当于Random(System.currentTimeMillis()) Random(long  seed) 常用方法: nextXxx()    生成对应类型的伪随机数. 示例: Random  random=new Random(); int x=random.nextInt();     //生成一个int范围内的伪随机数 x=rando…
Math类 //绝对值值运算: Math.abs(18.999); //返回19.999这个数的绝对值 Math.abs(-12.58); // 返回-12.58这个数的绝对值,为12.58 //取值运算: Math.signum(x); //如果x大于0则返回1.0,小于0则返回-1.0,等于0则返回0 //取整运算: Math.ceil(-13.56); //返回最近的且大于这个数的整数, 为14.0 Math.floor(-13.56); //返回最近的且小于这个数的整数, 为13.0 M…
JUC源码分析-其它工具类(一)ThreadLocalRandom ThreadLocalRandom 是 JDK7 在 JUC 包下新增的随机数生成器,它解决了 Random 在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足.需要注意的是 Random 本身是线程安全的.同时 Random 实例不是安全可靠的加密,可以使用 java.security.SecureRandom 来提供一个可靠的加密. 1. 随机数算法介绍 常用的随机数算法有两种:同余法(Congrue…
java基础类库 Scanner类(java.util.scanner) Scanner对象.hasNextXxx(),hasNext()默认方法为字符串://Returns true if this scanner has another token in its input. Scanner对象.next(); //Finds and returns the next complete token from this scanner. Scanner sc = new Scanner(Sys…
Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术的3.2.1节) 如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的 也可以调用Math.random()生成随机数 Random实例是线程安全的,但是并发使用Random实例会影响效率,可以考虑使用ThreadLocalRandom变量. Random实…
Java中基础类库: 在这里我仅仅介绍几种我个人觉得会常常使用的 1:Object类中的Clone机制仅仅是对对象进行浅层次的克隆,假设须要进行深层次的克隆的话那么就要自己写(详细Clone方法请參考JavaAPI文档) 2:java7新增的Objects类 它提供了一些工具方法来操作对像,这些工具方法大多是"空指"针安全的.比方你不能确定一个引用变量是否为null,假设贸然的调用toString()方法,则可能引发NullPointException异常.假设使用Objects提供的…
运行 Java 程序的参数.使用 Scanner 获取键盘输入.使用 BufferedReader 获取键盘输入.System类.Runtime类.Object类.Java 7新增的 Objects 类.String.StringBuffer和 StringBuilder类.Math类.Java 7的 Threadlocalrandom 与 Random.BigDecimal类.Date类.Calendar类.Timezone类.创建正则表达式.使用正则表达式 .Java国际化的思路.Java支…
最近浏览了一下阿里巴巴的Java开发手册,感觉内容确实非常的赞,发现了不少自己在编程中的误区,因此决定通过成文牢固掌握,文中将选取个人认为比较重要的部分进行描述与分析."愿站在巨人的肩膀上,码出高效,码出质量". 概述 手册中内容很多,包括编码规约.工程结构.MySQL数据库.异常日志.安全规约.单元测试等6大部分.其中工程结构部分在整体上对项目进行了把控,编码规约和MySQL设计规约中有非常多的"最佳实践",个人认为是最为有价值的部分.次重点安全规约很符合互联网场…
版本4.0 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JMeter现在支持JAVA 9. 提供新的边界提取器元件,提供易于提取和更好的性能 可用于在JSON响应上断言的新JSON Assertion元素. 提供新的精确吞吐量定时器元件,可在给定的恒定吞吐量下产生泊松到达. JMS点对点采样器增强了读取,浏览和清除选项. 现在,在许多测试元素上选择了最佳属性值,以确保最佳实践是默认值: 新添加如果Controller…
1.一个java文件中可以有多个类,但是只能有一个public类,并且该类需要与文件同名 第6章 对象的软,弱和虚引用 1.强引用---创建一个对象,并把这个对象赋给一个引用变量.一个对象被一个以上的强引用变量所引用时,它处于可达状态,不可能被系统垃圾回收机制回收 2.软引用--通过SoftReferene类来实现,对于软引用,系统垃圾回收时,如果系统内存不够用,系统可能会回收它. 3.弱引用--通过WeakReference累实现.对于弱引用对象而言,当系统垃圾回收时,不管系统内存是否足够用,…
前言 一提到线程安全的并发计数器,AtomicLong 必然是第一个被联想到的工具.Atomic* 一系列的原子类以及它们背后的 CAS 无锁算法,常常是高性能,高并发的代名词.本文将会阐释,在并发场景下,使用 AtomicLong 来充当并发计数器将会是一个糟糕的设计,实际上存在不少 AtomicLong 之外的计数器方案.近期我研究了一些 Jdk1.8 以及 JCTools 的优化方案,并将它们的对比与实现细节整理于此. 相关面试题: 单机场景下,有比 AtomicLong 更高效的并发计数…
一.概述 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 它同ThreadPoolExecutor一样,也实现了Executor和ExecutorService接口.它使用了一个无限队列来保存需要执行的任务,而线程的数量则是通过构造函数传入,如果没有向构造函数中传入希望的线程数量,那么当前计算机可用的CPU数量会被设置为线程数量作为默认值. Fork/Join的运行流程如下图所示: 1.1.…
1 System.nanoTime 测试性能时,System.nanoTime比System.currentTimeMills更精确,前者使用纳秒计时,且对系统影响更小. 具体来说: System.currentTimeMills返回自1970年1月1日以来经过的毫秒数,返回的精度与操作系统有关 System.nanoTime:不是现实时间,是虚拟机提供的计时时间,精确到纳秒 2 ThreadLocalRandom 通常生成随机数会使用Random类,Random是线程安全的,Random实例里…
Random类和ThreadLocalRandom类 Random类用于生成一个伪随机数,他有两个构造方法:一个构造方法使用默认的种子(以当前时间作为种子),另一个构造方法需要显示传入一个long型整数的种子. ThreadLocalRandom类是Random类的增强版.在并发访问的环境下,使用ThreadLocalRandom类可以减少多线程资源竞争,保证系统具有更好的线程安全性. ThreadLocalRandom类提供了一个静态的current()方法来获取ThreadLocalRand…
文中的 Random即:java.util.Random,ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即:java.security.SecureRandom Q:Random是不是线程安全的?A:Random是线程安全的,但是多线程下可能性能比较低.参考:http://docs.oracle.com/javase/7/docs/api/java/util/Random.htmlhttp://stac…
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random,ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即:java.security.SecureRandom Q:Random是不是线程安全的?A:Random是线程安全的,但是多线程下可能性能比较低.参考:http://docs.oracle.com…
 详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp84 Random即:java.util.Random, ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即:java.security.SecureRandomQ:Random是不是线程安全的?A:Random是线程安全的,但是多线程下可能性能比较低.参考:http://doc…
1.Random:产生一个伪随机数(通过相同的种子,产生的随机数是相同的): Random r=new Random(); System.out.println(r.nextBoolean()); System.out.print(r.nextInt(50));//随机生成0~50的随机数,不包括50 System.out.println(r.nextInt(20)+30);//随机生成30~50的随机数,不包括50 2.ThreadLocalRandom:是JDK 7之后提供并发产生随机数,能…
package frank; import java.lang.*; import java.util.*;//工具类一般都在util里面 import java.util.concurrent.ThreadLocalRandom; /** * ThreadLocalRandom Random类 * */ public class App { public static void main(String[] args)throws Exception { Random ran = new Ran…
var rand = new Random(); System.out.println(rand.nextBoolean()); System.out.println(rand.nextInt()); System.out.println(rand.nextDouble()); System.out.println(rand.nextGaussian()); ]; rand.nextBytes(buffer); System.out.println(Arrays.toString(buffer)…
Java7 的Random伪随机数和线程安全的ThreadLocalRandom 一.Random伪随机数: Random 类专门用于生成一个伪随机数,它有两个构造器: 一个构造器使用默认的种子(以当前时间作为种子) ,另 个构造器需要程序员显式传入一个 long 整数的种子. 当使用默认的种子或传入相同的种子构造 Random 对象时,它们属于同一个种子,只要两个 Random 对象的种子相同,而且方法的调用顺序也相同,它们就会产生相同的数字序列 也就是说, Random 产生的数字并不是真正…
Random可以说是每个开发都知道,而且都用的很6的类,如果你说,你没有用过Random,也不知道Random是什么鬼,那么你也不会来到这个技术类型的社区,也看不到我的博客了.但并不是每个人都知道Random的原理,知道Random在高并发下的缺陷的人应该更少.这篇博客,我就来分析下Random类在并发下的缺陷以及JUC对其的优化. Random的原理及缺陷 public static void main(String[] args) { Random random = new Random()…
Random类专门用于生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子(以当前时间作为种子),另一个构造器需要程序员显示传入一个long型整数的种子. Random类比Math类的random()方法提供了更多的方式来生成各种伪随机数,可以生成浮点类型的伪随机数,也可以生成整数类型的伪随机数,还可以指定生成随机数的范围.Random类的常用用法如下示例: public class Test { public static void main(String[] args) { Rando…
主要翻译自http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/,原作者是MIT的大神,加入了一些我自己的理解. 问题由来 给你某人一天内一系列生活照片,让你为每一张照片添加label(比如唱歌,跳舞,吃饭...),你要怎么做. 一种方式是忽略照片的顺序性,训练出一个classifier.比如你可以拿一个月的快照作为训练样本,然后训练出一个模型.这样来一个新图片,背景很暗,拍摄于早上,模型可能会将其判断…
JDK 并发包中 ThreadLocalRandom 类原理剖析,经常使用的随机数生成器 Random 类的原理是什么?及其局限性是什么?ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性? 我们首先看Random 类及其局限性,如下: 在 JDK7 之前包括现在,java.util.Random 应该是使用比较广泛的随机数生成工具类,另外 java.lang.Math 中的随机数生成也是使用的 java.util.Random 的实例.…
数值操作 数值新特性 包装类 浮点 BigDecimal BigInteger 数值本地化 随机数 假随机数 真随机数 播种 结语 数值操作 数值新特性 123_456 等价于 123456,增加可读性 包装类 每个基本数据类型都会有一个包装类与之对应,用来提供更为强大的功能 包装类: Byte Short Integer Long Float Double Character Boolean 将字符串转化成对应的基本数据类型 boolean bl = Boolean.parseBoolean(…
原文链接:https://www.jianshu.com/p/9c2198586f9b 2.2. 并发包中ThreadLocalRandom类原理剖析 ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足.本节首先讲解下Random类的实现原理已经它在多线程下使用的局限性,然后引入ThreadLocalRandom类,通过讲解ThreadLocalRandom的实现原理来说明…