1,多線程
總結下:每一個Random實例裏面有一個原子性的種子變量用來記錄當前的種子的值,當要生成新的隨機數時候要根據當前種子計算新的種子並更新回原子變量。多線程下使用單個Random實例生成隨機數時候,多個線程同時計算隨機數計算新的種子時候多個線程會競爭同一個原子變量的更新操做,因爲原子變量的更新是CAS操做,同時只有一個線程會成功,因此會形成大量線程進行自旋重試,這是會下降併發性能的,因此ThreadLocalRandom應運而生。併發
ThreadLocalRandom.current().ints(100000, 1000000).distinct().limit(6);
ThreadLocalRandom使用ThreadLocal的原理,讓每一個線程內持有一個本地的種子變量,該種子變量只有在使用隨機數時候纔會被初始化,多線程下計算新種子時候是根據本身線程內維護的種子變量進行更新,從而避免了競爭
2,
int num=(int )((Math.random()*9+1)*10000);//隨機得到5位數