Updated UlidBasedGuidCreator

This commit is contained in:
Fabio Lima 2020-04-08 19:02:25 -03:00
parent ffffe2af51
commit 1826fd960e
1 changed files with 1 additions and 35 deletions

View File

@ -26,7 +26,6 @@ package com.github.f4b6a3.ulid.creator;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import com.github.f4b6a3.ulid.timestamp.TimestampStrategy; import com.github.f4b6a3.ulid.timestamp.TimestampStrategy;
import com.github.f4b6a3.ulid.util.UlidUtil; import com.github.f4b6a3.ulid.util.UlidUtil;
@ -57,8 +56,6 @@ public class UlidBasedGuidCreator {
protected Random random; protected Random random;
protected boolean useThreadLocal = false;
protected static final String OVERRUN_MESSAGE = "The system overran the generator by requesting too many GUIDs."; protected static final String OVERRUN_MESSAGE = "The system overran the generator by requesting too many GUIDs.";
protected TimestampStrategy timestampStrategy; protected TimestampStrategy timestampStrategy;
@ -172,10 +169,7 @@ public class UlidBasedGuidCreator {
protected synchronized void reset() { protected synchronized void reset() {
// Get random values // Get random values
if (useThreadLocal) { if (random == null) {
this.randomMsb = truncate(ThreadLocalRandom.current().nextLong());
this.randomLsb = truncate(ThreadLocalRandom.current().nextLong());
} else if (random == null) {
this.randomMsb = truncate(RandomUtil.get().nextLong()); this.randomMsb = truncate(RandomUtil.get().nextLong());
this.randomLsb = truncate(RandomUtil.get().nextLong()); this.randomLsb = truncate(RandomUtil.get().nextLong());
} else { } else {
@ -231,12 +225,7 @@ public class UlidBasedGuidCreator {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public synchronized <T extends UlidBasedGuidCreator> T withRandomGenerator(Random random) { public synchronized <T extends UlidBasedGuidCreator> T withRandomGenerator(Random random) {
this.random = random; this.random = random;
// disable thread local
this.useThreadLocal = false;
return (T) this; return (T) this;
} }
@ -253,31 +242,8 @@ public class UlidBasedGuidCreator {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public synchronized <T extends UlidBasedGuidCreator> T withFastRandomGenerator() { public synchronized <T extends UlidBasedGuidCreator> T withFastRandomGenerator() {
final int salt = (int) FingerprintUtil.getFingerprint(); final int salt = (int) FingerprintUtil.getFingerprint();
this.random = new Xorshift128PlusRandom(salt); this.random = new Xorshift128PlusRandom(salt);
// disable thread local
this.useThreadLocal = false;
return (T) this;
}
/**
* Replaces the default random generator with ThreadLocalRandom.
*
* See {@link java.util.concurrent.ThreadLocalRandom}
*
* @return {@link RandomUuidCreator}
*/
@SuppressWarnings("unchecked")
public synchronized <T extends UlidBasedGuidCreator> T withThreadLocalRandomGenerator() {
this.useThreadLocal = true;
// remove random instance
this.random = null;
return (T) this; return (T) this;
} }