zoukankan      html  css  js  c++  java
  • java并发编程之美-阅读记录3

    java并发包中的ThreadLocalRandom类,jdk1.7增加的随机数生成器

    Random类的缺点:是多个线程使用同一个原子性的种子变量,导致对原子变量的更新产生竞争,降低了效率(该类是线程安全的,但是多线程环境下操作统一实例时,会有效率问题,jdk1.7之后可以使用ThreadLocalRandom类,1.7之前保证多个线程都有一个自己的Random实例即可)

        protected int next(int bits) {
            long oldseed, nextseed;
            // 所谓的种子,即seed原子变量,使用compareAndSet比较修改方式,在多线程环境下,多个线程调用nextInt是会产生竞争,导致效率不高
            AtomicLong seed = this.seed;
            do {
                oldseed = seed.get();
                nextseed = (oldseed * multiplier + addend) & mask;
            } while (!seed.compareAndSet(oldseed, nextseed));
            return (int)(nextseed >>> (48 - bits));
        }

    ThreadLocalRandom的流成类似ThreadLocal,都算是一个工具类,使每一个线程内都有一个自己的副本。

  • 相关阅读:
    递推数列
    大数阶乘
    成绩排序
    DevC++ return 1 exit status
    POJ 1061 青蛙的约会
    ZOJ 2750 Idiomatic Phrases Game
    nyoj 545 Metric Matrice
    nyoj 308 Substring
    nyoj 515完全覆盖 II
    nyoj 1248 海岛争霸
  • 原文地址:https://www.cnblogs.com/nxzblogs/p/11329965.html
Copyright © 2011-2022 走看看