網頁

2019/5/23

Java 從指定的整數範圍中取得隨機值

若要從一個指定的整數大小中取出隨機值的作法如下。

例如從1 - 10(含)間隨機取得整數,使用
ThreadLocalRandom.current().nextInt(int origin, int bound))

origin是範圍的最小值(含),bound是範圍的最大值(不含)。

int min = 0;
int max = 10;

ThreadLocalRandom currentThreadLocalRandom = ThreadLocalRandom.current();

int i = 0;
while(i < 100) {
    int randomNumber = currentThreadLocalRandom .nextInt(min, max + 1);
    System.out.println(randomNumber);
    i++;
}

ThreadLocalRandom.current()是取得目前執行緒的ThreadLocalRandom實例,也就是在多執行緒的環境下每條執行緒都會有自己的ThreadLocalRandom實例,因此可避免一般Random在多執行緒下因同步所造成的效能影響。簡單說就是以上的方法也適合用在多執行緒環境。

以下節錄自Random API文件說明:

Instances of java.util.Random are threadsafe. However, the concurrent use of the same java.util.Random instance across threads may encounter contention and consequent poor performance. Consider instead using ThreadLocalRandom in multithreaded designs.


參考:

沒有留言:

張貼留言