คลาส ThreadLocalRandom
java.util.concurrent.ThreadLocalRandom เป็นคลาสยูทิลิตี้ที่นำมาใช้ตั้งแต่ jdk 1.7 เป็นต้นไปและมีประโยชน์เมื่อต้องใช้เธรดหลายเธรดหรือ ForkJoinTasks เพื่อสร้างตัวเลขแบบสุ่ม ปรับปรุงประสิทธิภาพและมีความขัดแย้งน้อยกว่าวิธี Math.random ()
วิธี ThreadLocalRandom
ต่อไปนี้เป็นรายการวิธีการสำคัญที่มีอยู่ในคลาส ThreadLocalRandom
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | public static ThreadLocalRandom current() ส่งคืน ThreadLocalRandom ของเธรดปัจจุบัน |
2 | protected int next(int bits) สร้างหมายเลขเทียมถัดไป |
3 | public double nextDouble(double n) ส่งคืน pseudorandom ค่าคู่ที่กระจายสม่ำเสมอระหว่าง 0 (รวม) และค่าที่ระบุ (ไม่รวม) |
4 | public double nextDouble(double least, double bound) ส่งคืนค่าเทียมที่มีการกระจายอย่างสม่ำเสมอระหว่างค่าน้อยที่สุดที่กำหนด (รวม) และขอบเขต (ไม่รวม) |
5 | public int nextInt(int least, int bound) ส่งคืนค่าเทียมที่มีการกระจายอย่างสม่ำเสมอระหว่างค่าน้อยที่สุดที่กำหนด (รวม) และขอบเขต (ไม่รวม) |
6 | public long nextLong(long n) ส่งคืน pseudorandom ค่าที่กระจายอย่างสม่ำเสมอระหว่าง 0 (รวม) และค่าที่ระบุ (ไม่รวม) |
7 | public long nextLong(long least, long bound) ส่งคืนค่าเทียมที่มีการกระจายอย่างสม่ำเสมอระหว่างค่าน้อยที่สุดที่กำหนด (รวม) และขอบเขต (ไม่รวม) |
8 | public void setSeed(long seed) พ่น UnsupportedOperationException |
ตัวอย่าง
โปรแกรม TestThread ต่อไปนี้แสดงวิธีการเหล่านี้บางส่วนของอินเทอร์เฟซ Lock ที่นี่เราได้ใช้ lock () เพื่อรับล็อคและปลดล็อก () เพื่อคลายล็อก
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 เพื่อรับตัวเลขสุ่ม