MathUtil random now uses FastThreadLocal

This commit is contained in:
nathan 2016-04-02 19:30:44 +02:00
parent b492e97f47
commit 7111b5ed73

View File

@ -20,23 +20,20 @@ package dorkbox.util;
public public
class MathUtil { class MathUtil {
private static final ThreadLocal<MersenneTwisterFast> random = new ThreadLocal<MersenneTwisterFast>(); private static final FastThreadLocal<MersenneTwisterFast> random = new FastThreadLocal<MersenneTwisterFast>() {
@Override
public
MersenneTwisterFast initialValue() {
return new MersenneTwisterFast();
}
};
/** /**
* Creates the thread local MersenneTwister (as it's not thread safe), if necessary * Creates the thread local MersenneTwister (as it's not thread safe), if necessary
*/ */
public static public static
MersenneTwisterFast random() { MersenneTwisterFast random() {
MersenneTwisterFast mersenneTwisterFast = random.get(); return random.get();
if (mersenneTwisterFast == null) {
mersenneTwisterFast = new MersenneTwisterFast();
random.set(mersenneTwisterFast);
return mersenneTwisterFast;
}
else {
return mersenneTwisterFast;
}
} }
/** /**
@ -44,7 +41,7 @@ class MathUtil {
*/ */
public static public static
int randomInt() { int randomInt() {
return random().nextInt(); return random.get().nextInt();
} }
/** /**
@ -52,7 +49,7 @@ class MathUtil {
*/ */
public static public static
int randomInt(int range) { int randomInt(int range) {
return random().nextInt(range + 1); return random.get().nextInt(range + 1);
} }
/** /**
@ -60,7 +57,7 @@ class MathUtil {
*/ */
public static public static
int randomInt(int start, int end) { int randomInt(int start, int end) {
return start + random().nextInt(end - start + 1); return start + random.get().nextInt(end - start + 1);
} }
/** /**
@ -68,7 +65,7 @@ class MathUtil {
*/ */
public static public static
boolean randomBoolean() { boolean randomBoolean() {
return random().nextBoolean(); return random.get().nextBoolean();
} }
/** /**
@ -76,7 +73,7 @@ class MathUtil {
*/ */
public static public static
float randomFloat() { float randomFloat() {
return random().nextFloat(); return random.get().nextFloat();
} }
/** /**
@ -84,7 +81,7 @@ class MathUtil {
*/ */
public static public static
float randomFloat(float range) { float randomFloat(float range) {
return random().nextFloat() * range; return random.get().nextFloat() * range;
} }
/** /**
@ -92,7 +89,7 @@ class MathUtil {
*/ */
public static public static
float randomFloat(float start, float end) { float randomFloat(float start, float end) {
return start + random().nextFloat() * (end - start); return start + random.get().nextFloat() * (end - start);
} }
// --- // ---