ThreadLocalRandom类是jdk1.7在juc包下新增的随机数生成器,该类继承于Random类,那既然有Random随机数生成器了,为什么在jdk1.7的时候又新增一个呢?,这是因为Random在多线程坏境下的效率并不理想,在多线程下使用存在局限性,所以为了提高多线程坏境下随机数生成的效率引入从而了ThreadLocalRandom类。
我们先来一个例子来对比下这两个类效率。
@State(Scope.Benchmark)
@Warmup(iterations = 5, time = 1)
@Measurement(iterations = 5, time = 1)
@Fork(1)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@BenchmarkMode(Mode.AverageTime)
public class TestMain {
private ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();
private Random random = new Random();
public static void main(String[] args) throws RunnerException {
Options options = new OptionsBuilder().include(TestMain.class.getName()).build();
new Runner(options).run();
}
@Benchmark
@Threads(8)
public void runThreadLocalRandom() {
for (int i = 0; i < 1000; i++) {
th