Lớp ThreadLocalRandom
Java.util.concurrent.ThreadLocalRandom là một lớp tiện ích được giới thiệu từ jdk 1.7 trở đi và rất hữu ích khi yêu cầu nhiều luồng hoặc ForkJoinTasks để tạo số ngẫu nhiên. Nó cải thiện hiệu suất và ít gây tranh cãi hơn phương thức Math.random ().
Phương thức ThreadLocalRandom
Sau đây là danh sách các phương thức quan trọng có sẵn trong lớp ThreadLocalRandom.
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | public static ThreadLocalRandom current() Trả về ThreadLocalRandom của luồng hiện tại. |
2 | protected int next(int bits) Tạo số giả ngẫu nhiên tiếp theo. |
3 | public double nextDouble(double n) Trả về giá trị kép giả, được phân phối đồng nhất giữa 0 (bao gồm) và giá trị được chỉ định (loại trừ). |
4 | public double nextDouble(double least, double bound) Trả về giá trị giả ngẫu nhiên, được phân phối đồng đều giữa giá trị nhỏ nhất đã cho (bao gồm) và bị ràng buộc (loại trừ). |
5 | public int nextInt(int least, int bound) Trả về giá trị giả ngẫu nhiên, được phân phối đồng đều giữa giá trị nhỏ nhất đã cho (bao gồm) và bị ràng buộc (loại trừ). |
6 | public long nextLong(long n) Trả về giá trị giả ngẫu nhiên, được phân phối đồng nhất giữa 0 (bao gồm) và giá trị được chỉ định (loại trừ). |
7 | public long nextLong(long least, long bound) Trả về giá trị giả ngẫu nhiên, được phân phối đồng đều giữa giá trị nhỏ nhất đã cho (bao gồm) và bị ràng buộc (loại trừ). |
số 8 | public void setSeed(long seed) Ném UnsupportedOperationException. |
Thí dụ
Chương trình TestThread sau đây trình bày một số phương pháp này của giao diện Khóa. Ở đây chúng tôi đã sử dụng lock () để có được khóa và unlock () để mở khóa.
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());
}
}
Điều này sẽ tạo ra kết quả sau.
Đầu ra
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)
Ở đây chúng tôi đã sử dụng các lớp ThreadLocalRandom và Random để lấy các số ngẫu nhiên.