ThreadLocalRandom 클래스
java.util.concurrent.ThreadLocalRandom은 jdk 1.7부터 도입 된 유틸리티 클래스이며 난수를 생성하기 위해 다중 스레드 또는 ForkJoinTask가 필요할 때 유용합니다. 성능이 향상되고 Math.random () 메서드보다 경합이 적습니다.
ThreadLocalRandom 메서드
다음은 ThreadLocalRandom 클래스에서 사용할 수있는 중요한 메서드 목록입니다.
Sr. 아니. | 방법 및 설명 |
---|---|
1 | public static ThreadLocalRandom current() 현재 스레드의 ThreadLocalRandom을 반환합니다. |
2 | protected int next(int bits) 다음 의사 난수를 생성합니다. |
삼 | public double nextDouble(double n) 0 (포함)과 지정된 값 (제외) 사이의 균일하게 분산 된 의사 난수 double 값을 반환합니다. |
4 | public double nextDouble(double least, double bound) 주어진 최소값 (포함)과 바운드 (배타적) 사이에 균일하게 분포 된 의사 난수 값을 반환합니다. |
5 | public int nextInt(int least, int bound) 주어진 최소값 (포함)과 바운드 (배타적) 사이에 균일하게 분포 된 의사 난수 값을 반환합니다. |
6 | public long nextLong(long n) 0 (포함)과 지정된 값 (제외) 사이에 균일하게 분포 된 의사 난수 값을 반환합니다. |
7 | public long nextLong(long least, long bound) 주어진 최소값 (포함)과 바운드 (배타적) 사이에 균일하게 분포 된 의사 난수 값을 반환합니다. |
8 | public void setSeed(long seed) UnsupportedOperationException이 발생합니다. |
예
다음 TestThread 프로그램은 Lock 인터페이스의 이러한 메서드 중 일부를 보여줍니다. 여기에서는 lock ()을 사용하여 잠금을 획득하고 unlock ()을 사용하여 잠금을 해제했습니다.
import java.util.Random;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.ThreadLocalRandom;
public class TestThread {
public static void main(final String[] arguments) {
System.out.println("Random Integer: " + new Random().nextInt());
System.out.println("Seeded Random Integer: " + new Random(15).nextInt());
System.out.println(
"Thread Local Random Integer: " + ThreadLocalRandom.current().nextInt());
final ThreadLocalRandom random = ThreadLocalRandom.current();
random.setSeed(15); //exception will come as seeding is not allowed in ThreadLocalRandom.
System.out.println("Seeded Thread Local Random Integer: " + random.nextInt());
}
}
그러면 다음과 같은 결과가 생성됩니다.
산출
Random Integer: 1566889198
Seeded Random Integer: -1159716814
Thread Local Random Integer: 358693993
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.concurrent.ThreadLocalRandom.setSeed(Unknown Source)
at TestThread.main(TestThread.java:21)
여기서는 난수를 얻기 위해 ThreadLocalRandom 및 Random 클래스를 사용했습니다.