Эх сурвалжийг харах

ThreadLocalRandom is included in JDK7

Brian Clozel 11 жил өмнө
parent
commit
0155915e87

+ 1 - 156
spring/src/main/java/com/techempower/spring/web/WorldDatabaseController.java

@@ -3,6 +3,7 @@ package com.techempower.spring.web;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -67,160 +68,4 @@ final class WorldDatabaseController {
 		return raw;
 	}
 
-	private static class ThreadLocalRandom extends Random {
-		// same constants as Random, but must be redeclared because private
-		private static final long multiplier = 0x5DEECE66DL;
-		private static final long addend = 0xBL;
-		private static final long mask = (1L << 48) - 1;
-
-		/**
-		 * The random seed. We can't use super.seed.
-		 */
-		private long rnd;
-
-		/**
-		 * Initialization flag to permit calls to setSeed to succeed only while executing
-		 * the Random constructor. We can't allow others since it would cause setting seed
-		 * in one part of a program to unintentionally impact other usages by the thread.
-		 */
-		boolean initialized;
-
-		// Padding to help avoid memory contention among seed updates in
-		// different TLRs in the common case that they are located near
-		// each other.
-		private long pad0, pad1, pad2, pad3, pad4, pad5, pad6, pad7;
-
-		/**
-		 * The actual ThreadLocal
-		 */
-		private static final ThreadLocal<ThreadLocalRandom> localRandom = new ThreadLocal<ThreadLocalRandom>() {
-			protected ThreadLocalRandom initialValue() {
-				return new ThreadLocalRandom();
-			}
-		};
-
-		/**
-		 * Constructor called only by localRandom.initialValue.
-		 */
-		ThreadLocalRandom() {
-			super();
-			initialized = true;
-		}
-
-		/**
-		 * Returns the current thread's {@code ThreadLocalRandom}.
-		 * 
-		 * @return the current thread's {@code ThreadLocalRandom}
-		 */
-		public static ThreadLocalRandom current() {
-			return localRandom.get();
-		}
-
-		/**
-		 * Throws {@code UnsupportedOperationException}. Setting seeds in this generator
-		 * is not supported.
-		 * 
-		 * @throws UnsupportedOperationException always
-		 */
-		public void setSeed(long seed) {
-			if (initialized)
-				throw new UnsupportedOperationException();
-			rnd = (seed ^ multiplier) & mask;
-		}
-
-		protected int next(int bits) {
-			rnd = (rnd * multiplier + addend) & mask;
-			return (int) (rnd >>> (48 - bits));
-		}
-
-		/**
-		 * Returns a pseudorandom, uniformly distributed value between the given least
-		 * value (inclusive) and bound (exclusive).
-		 * 
-		 * @param least the least value returned
-		 * @param bound the upper bound (exclusive)
-		 * @throws IllegalArgumentException if least greater than or equal to bound
-		 * @return the next value
-		 */
-		public int nextInt(int least, int bound) {
-			if (least >= bound)
-				throw new IllegalArgumentException();
-			return nextInt(bound - least) + least;
-		}
-
-		/**
-		 * Returns a pseudorandom, uniformly distributed value between 0 (inclusive) and
-		 * the specified value (exclusive).
-		 * 
-		 * @param n the bound on the random number to be returned. Must be positive.
-		 * @return the next value
-		 * @throws IllegalArgumentException if n is not positive
-		 */
-		public long nextLong(long n) {
-			if (n <= 0)
-				throw new IllegalArgumentException("n must be positive");
-			// Divide n by two until small enough for nextInt. On each
-			// iteration (at most 31 of them but usually much less),
-			// randomly choose both whether to include high bit in result
-			// (offset) and whether to continue with the lower vs upper
-			// half (which makes a difference only if odd).
-			long offset = 0;
-			while (n >= Integer.MAX_VALUE) {
-				int bits = next(2);
-				long half = n >>> 1;
-				long nextn = ((bits & 2) == 0) ? half : n - half;
-				if ((bits & 1) == 0)
-					offset += n - nextn;
-				n = nextn;
-			}
-			return offset + nextInt((int) n);
-		}
-
-		/**
-		 * Returns a pseudorandom, uniformly distributed value between the given least
-		 * value (inclusive) and bound (exclusive).
-		 * 
-		 * @param least the least value returned
-		 * @param bound the upper bound (exclusive)
-		 * @return the next value
-		 * @throws IllegalArgumentException if least greater than or equal to bound
-		 */
-		public long nextLong(long least, long bound) {
-			if (least >= bound)
-				throw new IllegalArgumentException();
-			return nextLong(bound - least) + least;
-		}
-
-		/**
-		 * Returns a pseudorandom, uniformly distributed {@code double} value between 0
-		 * (inclusive) and the specified value (exclusive).
-		 * 
-		 * @param n the bound on the random number to be returned. Must be positive.
-		 * @return the next value
-		 * @throws IllegalArgumentException if n is not positive
-		 */
-		public double nextDouble(double n) {
-			if (n <= 0)
-				throw new IllegalArgumentException("n must be positive");
-			return nextDouble() * n;
-		}
-
-		/**
-		 * Returns a pseudorandom, uniformly distributed value between the given least
-		 * value (inclusive) and bound (exclusive).
-		 * 
-		 * @param least the least value returned
-		 * @param bound the upper bound (exclusive)
-		 * @return the next value
-		 * @throws IllegalArgumentException if least greater than or equal to bound
-		 */
-		public double nextDouble(double least, double bound) {
-			if (least >= bound)
-				throw new IllegalArgumentException();
-			return nextDouble() * (bound - least) + least;
-		}
-
-		private static final long serialVersionUID = -5851777807851030925L;
-	}
-
 }