คลาส 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 เพื่อรับตัวเลขสุ่ม