diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/uuid/Uuids.java b/core/src/main/java/com/datastax/oss/driver/api/core/uuid/Uuids.java index 8dae31f3734..cd20da9b625 100644 --- a/core/src/main/java/com/datastax/oss/driver/api/core/uuid/Uuids.java +++ b/core/src/main/java/com/datastax/oss/driver/api/core/uuid/Uuids.java @@ -39,6 +39,7 @@ import java.util.Set; import java.util.SplittableRandom; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicLong; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -232,7 +233,7 @@ private static String getProcessPiece() { } } if (pid == null) { - pid = new Random().nextInt(); + pid = ThreadLocalRandom.current().nextInt(); LOG.warn("Could not determine PID, falling back to a random integer: {}", pid); } ClassLoader loader = Uuids.class.getClassLoader(); @@ -281,7 +282,7 @@ private static long makeClockSeqAndNode() { */ @NonNull public static UUID random() { - return random(new Random()); + return random(ThreadLocalRandom.current()); } /** @@ -300,7 +301,13 @@ public static UUID random() { @NonNull public static UUID random(@NonNull Random random) { byte[] data = new byte[16]; - random.nextBytes(data); + for (int i = 0; i < 16; i += 4) { + int rnd = random.nextInt(); + data[i] = (byte) (rnd >>> 24); + data[i + 1] = (byte) (rnd >>> 16); + data[i + 2] = (byte) (rnd >>> 8); + data[i + 3] = (byte) rnd; + } return buildUuid(data, 4); }