Random
objects and will result in better performance as there is less overhead and contention. In addition, this class also provides "bounded" generation methods.
For example, the statement below generates a random number between 1 (inclusive) and 100 (exclusive).
int random = ThreadLocalRandom.current().nextInt(1,100);Wait, there's a BUG!
While trying out this class, I noticed that the SAME random numbers were being produced across all my threads. I then discovered this bug which reported the same issue I was having. It appears that the seed is never initialised so the same random numbers are produced every time. I wouldn't recommend using this class until the bug is fixed. The following code illustrates the issue:
//3 threads for(int i = 0; i < 3; i++) { final Thread thread = new Thread() { @Override public void run() { System.out.print(Thread.currentThread().getName() + ":"); //each thread prints 3 random numbers for(int j = 0; j < 3; j++) { final int random = ThreadLocalRandom.current().nextInt(1, 50); System.out.print(random + ","); } System.out.println(); } }; thread.start(); thread.join(); }prints:
Thread-0:1,5,24, Thread-1:1,5,24, Thread-2:1,5,24,
The bug had been fixed in new jsr166y
ReplyDelete