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,都算是一个工具类,使每一个线程内都有一个自己的副本。

猜你喜欢

转载自www.cnblogs.com/nxzblogs/p/11329965.html