diff --git a/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java b/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java index f3ea6697733c..9f547da644e9 100644 --- a/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java +++ b/buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java @@ -18,9 +18,8 @@ import io.netty.util.ByteProcessor; import io.netty.util.CharsetUtil; import io.netty.util.IllegalReferenceCountException; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.After; -import org.junit.Assume; import org.junit.Before; import org.junit.Test; @@ -38,7 +37,6 @@ import java.nio.channels.ScatteringByteChannel; import java.nio.channels.WritableByteChannel; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.Random; import java.util.Set; @@ -2126,7 +2124,7 @@ private void testInternalNioBuffer(int a) { assertEquals(1, buf.remaining()); byte[] data = new byte[a]; - ThreadLocalRandom.current().nextBytes(data); + PlatformDependent.threadLocalRandom().nextBytes(data); buffer.writeBytes(data); buf = buffer.internalNioBuffer(0, a); diff --git a/buffer/src/test/java/io/netty/buffer/RetainedSlicedByteBufTest.java b/buffer/src/test/java/io/netty/buffer/RetainedSlicedByteBufTest.java index d97b0a69c488..7150f1c667b8 100644 --- a/buffer/src/test/java/io/netty/buffer/RetainedSlicedByteBufTest.java +++ b/buffer/src/test/java/io/netty/buffer/RetainedSlicedByteBufTest.java @@ -16,7 +16,7 @@ package io.netty.buffer; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Assume; import static org.junit.Assert.assertEquals; @@ -26,8 +26,8 @@ public class RetainedSlicedByteBufTest extends SlicedByteBufTest { protected ByteBuf newBuffer(int length, int maxCapacity) { Assume.assumeTrue(maxCapacity == Integer.MAX_VALUE); ByteBuf wrapped = Unpooled.wrappedBuffer(new byte[length * 2]); - ByteBuf buffer = wrapped.retainedSlice(length > 1 ? ThreadLocalRandom.current().nextInt(length - 1) + 1 : 0, - length); + ByteBuf buffer = wrapped.retainedSlice(length > 1 ? + PlatformDependent.threadLocalRandom().nextInt(length - 1) + 1 : 0, length); wrapped.release(); assertEquals(0, buffer.readerIndex()); diff --git a/buffer/src/test/java/io/netty/buffer/SlicedByteBufTest.java b/buffer/src/test/java/io/netty/buffer/SlicedByteBufTest.java index 9796e09a6143..641d34264697 100644 --- a/buffer/src/test/java/io/netty/buffer/SlicedByteBufTest.java +++ b/buffer/src/test/java/io/netty/buffer/SlicedByteBufTest.java @@ -15,7 +15,7 @@ */ package io.netty.buffer; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Assume; import org.junit.Ignore; import org.junit.Test; @@ -34,7 +34,8 @@ public class SlicedByteBufTest extends AbstractByteBufTest { protected ByteBuf newBuffer(int length, int maxCapacity) { Assume.assumeTrue(maxCapacity == Integer.MAX_VALUE); ByteBuf buffer = Unpooled.wrappedBuffer( - new byte[length * 2], length > 1 ? ThreadLocalRandom.current().nextInt(length - 1) + 1 : 0, length); + new byte[length * 2], length > 1 ? + PlatformDependent.threadLocalRandom().nextInt(length - 1) + 1 : 0, length); assertEquals(0, buffer.readerIndex()); assertEquals(length, buffer.writerIndex()); return buffer; diff --git a/codec-dns/src/test/java/io/netty/handler/codec/dns/DefaultDnsRecordEncoderTest.java b/codec-dns/src/test/java/io/netty/handler/codec/dns/DefaultDnsRecordEncoderTest.java index 234ac06b54b7..d6ad128f50c6 100644 --- a/codec-dns/src/test/java/io/netty/handler/codec/dns/DefaultDnsRecordEncoderTest.java +++ b/codec-dns/src/test/java/io/netty/handler/codec/dns/DefaultDnsRecordEncoderTest.java @@ -18,9 +18,9 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.socket.InternetProtocolFamily; +import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.SocketUtils; import io.netty.util.internal.StringUtil; -import io.netty.util.internal.ThreadLocalRandom; import org.junit.Test; import java.net.InetAddress; @@ -143,6 +143,6 @@ private static void testIp(InetAddress address, int prefix) throws Exception { } private static int nextInt(int max) { - return ThreadLocalRandom.current().nextInt(0, max); + return PlatformDependent.threadLocalRandom().nextInt(max); } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java index 4f4028941103..ca0d8e7608f6 100755 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java @@ -34,8 +34,8 @@ import io.netty.handler.codec.http.HttpVersion; import io.netty.handler.codec.http.LastHttpContent; import io.netty.handler.stream.ChunkedInput; +import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.StringUtil; -import io.netty.util.internal.ThreadLocalRandom; import java.io.File; import java.io.IOException; @@ -297,7 +297,7 @@ private void initMixedMultipart() { */ private static String getNewMultipartDelimiter() { // construct a generated delimiter - return Long.toHexString(ThreadLocalRandom.current().nextLong()).toLowerCase(); + return Long.toHexString(PlatformDependent.threadLocalRandom().nextLong()).toLowerCase(); } /** diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshakerTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshakerTest.java index dc6c1a660a62..fa86f9e94689 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshakerTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshakerTest.java @@ -29,7 +29,7 @@ import io.netty.handler.codec.http.HttpRequestEncoder; import io.netty.handler.codec.http.HttpResponseDecoder; import io.netty.util.CharsetUtil; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Test; import java.net.URI; @@ -102,7 +102,7 @@ protected WebSocketFrameEncoder newWebSocketEncoder() { }; byte[] data = new byte[24]; - ThreadLocalRandom.current().nextBytes(data); + PlatformDependent.threadLocalRandom().nextBytes(data); // Create a EmbeddedChannel which we will use to encode a BinaryWebsocketFrame to bytes and so use these // to test the actual handshaker. diff --git a/codec/src/test/java/io/netty/handler/codec/ByteToMessageDecoderTest.java b/codec/src/test/java/io/netty/handler/codec/ByteToMessageDecoderTest.java index d7d33f9c9c35..7df89a4a373c 100644 --- a/codec/src/test/java/io/netty/handler/codec/ByteToMessageDecoderTest.java +++ b/codec/src/test/java/io/netty/handler/codec/ByteToMessageDecoderTest.java @@ -20,8 +20,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.embedded.EmbeddedChannel; -import io.netty.util.ReferenceCountUtil; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Test; import java.util.List; @@ -217,7 +216,7 @@ protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) t } }); byte[] bytes = new byte[1024]; - ThreadLocalRandom.current().nextBytes(bytes); + PlatformDependent.threadLocalRandom().nextBytes(bytes); assertTrue(channel.writeInbound(Unpooled.wrappedBuffer(bytes))); assertBuffer(Unpooled.wrappedBuffer(bytes), (ByteBuf) channel.readInbound()); @@ -249,7 +248,7 @@ protected void decodeLast(ChannelHandlerContext ctx, ByteBuf in, List ou } }); byte[] bytes = new byte[1024]; - ThreadLocalRandom.current().nextBytes(bytes); + PlatformDependent.threadLocalRandom().nextBytes(bytes); assertTrue(channel.writeInbound(Unpooled.wrappedBuffer(bytes))); assertBuffer(Unpooled.wrappedBuffer(bytes, 0, bytes.length - 1), (ByteBuf) channel.readInbound()); diff --git a/codec/src/test/java/io/netty/handler/codec/compression/AbstractCompressionTest.java b/codec/src/test/java/io/netty/handler/codec/compression/AbstractCompressionTest.java index a0b2158f5ca5..db14dee94bb9 100644 --- a/codec/src/test/java/io/netty/handler/codec/compression/AbstractCompressionTest.java +++ b/codec/src/test/java/io/netty/handler/codec/compression/AbstractCompressionTest.java @@ -15,17 +15,17 @@ */ package io.netty.handler.codec.compression; -import io.netty.util.internal.ThreadLocalRandom; +import java.util.Random; public abstract class AbstractCompressionTest { - protected static final ThreadLocalRandom rand; + protected static final Random rand; protected static final byte[] BYTES_SMALL = new byte[256]; protected static final byte[] BYTES_LARGE = new byte[256 * 1024]; static { - rand = ThreadLocalRandom.current(); + rand = new Random(); fillArrayWithCompressibleData(BYTES_SMALL); fillArrayWithCompressibleData(BYTES_LARGE); } diff --git a/codec/src/test/java/io/netty/handler/codec/compression/AbstractIntegrationTest.java b/codec/src/test/java/io/netty/handler/codec/compression/AbstractIntegrationTest.java index 9ce264c13104..5eaed2f033f1 100644 --- a/codec/src/test/java/io/netty/handler/codec/compression/AbstractIntegrationTest.java +++ b/codec/src/test/java/io/netty/handler/codec/compression/AbstractIntegrationTest.java @@ -22,19 +22,19 @@ import io.netty.util.CharsetUtil; import io.netty.util.ReferenceCountUtil; import io.netty.util.internal.EmptyArrays; -import io.netty.util.internal.ThreadLocalRandom; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.Arrays; +import java.util.Random; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; public abstract class AbstractIntegrationTest { - protected static final ThreadLocalRandom rand = ThreadLocalRandom.current(); + protected static final Random rand = new Random(); protected EmbeddedChannel encoder; protected EmbeddedChannel decoder; diff --git a/codec/src/test/java/io/netty/handler/codec/compression/Lz4FrameDecoderTest.java b/codec/src/test/java/io/netty/handler/codec/compression/Lz4FrameDecoderTest.java index 0d5235513c91..d11e51aa8f65 100644 --- a/codec/src/test/java/io/netty/handler/codec/compression/Lz4FrameDecoderTest.java +++ b/codec/src/test/java/io/netty/handler/codec/compression/Lz4FrameDecoderTest.java @@ -132,8 +132,9 @@ public void testChecksumErrorOfLastBlock() throws Exception { @Override protected byte[] compress(byte[] data) throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(); + int size = MAX_BLOCK_SIZE + 1; LZ4BlockOutputStream lz4Os = new LZ4BlockOutputStream(os, - rand.nextInt(MIN_BLOCK_SIZE, MAX_BLOCK_SIZE + 1)); + rand.nextInt(size - MIN_BLOCK_SIZE) + MIN_BLOCK_SIZE); lz4Os.write(data); lz4Os.close(); diff --git a/codec/src/test/java/io/netty/handler/codec/compression/ZlibTest.java b/codec/src/test/java/io/netty/handler/codec/compression/ZlibTest.java index b9d6dd81f04a..7c25ec41ecc0 100644 --- a/codec/src/test/java/io/netty/handler/codec/compression/ZlibTest.java +++ b/codec/src/test/java/io/netty/handler/codec/compression/ZlibTest.java @@ -22,12 +22,13 @@ import io.netty.util.CharsetUtil; import io.netty.util.ReferenceCountUtil; import io.netty.util.internal.EmptyArrays; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.Random; import java.util.zip.DeflaterOutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -82,7 +83,7 @@ public abstract class ZlibTest { "").getBytes(CharsetUtil.UTF_8); static { - ThreadLocalRandom rand = ThreadLocalRandom.current(); + Random rand = PlatformDependent.threadLocalRandom(); rand.nextBytes(BYTES_SMALL); rand.nextBytes(BYTES_LARGE); } diff --git a/common/src/main/java/io/netty/util/ResourceLeakDetector.java b/common/src/main/java/io/netty/util/ResourceLeakDetector.java index 4cf067b79cc9..1335b9c1e02a 100644 --- a/common/src/main/java/io/netty/util/ResourceLeakDetector.java +++ b/common/src/main/java/io/netty/util/ResourceLeakDetector.java @@ -18,7 +18,6 @@ import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.SystemPropertyUtil; -import io.netty.util.internal.ThreadLocalRandom; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; @@ -27,7 +26,6 @@ import java.util.ArrayDeque; import java.util.Deque; import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.atomic.AtomicBoolean; import static io.netty.util.internal.StringUtil.EMPTY_STRING; import static io.netty.util.internal.StringUtil.NEWLINE; @@ -246,7 +244,7 @@ private DefaultResourceLeak track0(T obj) { } if (level.ordinal() < Level.PARANOID.ordinal()) { - if ((ThreadLocalRandom.current().nextInt(0, samplingInterval)) == 0) { + if ((PlatformDependent.threadLocalRandom().nextInt(samplingInterval)) == 0) { reportLeak(level); return new DefaultResourceLeak(obj); } else { diff --git a/common/src/main/java/io/netty/util/internal/MacAddressUtil.java b/common/src/main/java/io/netty/util/internal/MacAddressUtil.java index ca4dc75a0527..3c8c2cad3f72 100644 --- a/common/src/main/java/io/netty/util/internal/MacAddressUtil.java +++ b/common/src/main/java/io/netty/util/internal/MacAddressUtil.java @@ -138,7 +138,7 @@ public static byte[] defaultMachineId() { byte[] bestMacAddr = MacAddressUtil.bestAvailableMac(); if (bestMacAddr == null) { bestMacAddr = new byte[EUI64_MAC_ADDRESS_LENGTH]; - ThreadLocalRandom.current().nextBytes(bestMacAddr); + PlatformDependent.threadLocalRandom().nextBytes(bestMacAddr); logger.warn( "Failed to find a usable hardware address from the network interfaces; using random bytes: {}", MacAddressUtil.formatAddress(bestMacAddr)); diff --git a/common/src/main/java/io/netty/util/internal/PlatformDependent.java b/common/src/main/java/io/netty/util/internal/PlatformDependent.java index 51de1aaf7b8e..1b2ebfb1490c 100644 --- a/common/src/main/java/io/netty/util/internal/PlatformDependent.java +++ b/common/src/main/java/io/netty/util/internal/PlatformDependent.java @@ -44,6 +44,7 @@ import java.util.Locale; import java.util.Map; import java.util.Queue; +import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentMap; @@ -107,10 +108,26 @@ public final class PlatformDependent { private static final boolean USE_DIRECT_BUFFER_NO_CLEANER; private static final AtomicLong DIRECT_MEMORY_COUNTER; private static final long DIRECT_MEMORY_LIMIT; + private static final ThreadLocalRandomProvider RANDOM_PROVIDER; public static final boolean BIG_ENDIAN_NATIVE_ORDER = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN; static { + if (javaVersion() >= 7) { + RANDOM_PROVIDER = new ThreadLocalRandomProvider() { + @Override + public Random current() { + return java.util.concurrent.ThreadLocalRandom.current(); + } + }; + } else { + RANDOM_PROVIDER = new ThreadLocalRandomProvider() { + @Override + public Random current() { + return ThreadLocalRandom.current(); + } + }; + } if (logger.isDebugEnabled()) { logger.debug("-Dio.netty.noPreferDirect: {}", !DIRECT_BUFFER_PREFERRED); } @@ -877,6 +894,13 @@ public static Deque newConcurrentDeque() { } } + /** + * Return a {@link Random} which is not-threadsafe and so can only be used from the same thread. + */ + public static Random threadLocalRandom() { + return RANDOM_PROVIDER.current(); + } + private static boolean isAndroid0() { boolean android; try { @@ -1382,6 +1406,10 @@ public long value() { } } + private interface ThreadLocalRandomProvider { + Random current(); + } + private PlatformDependent() { // only static method supported } diff --git a/handler/src/main/java/io/netty/handler/ssl/util/ThreadLocalInsecureRandom.java b/handler/src/main/java/io/netty/handler/ssl/util/ThreadLocalInsecureRandom.java index c69f886cd506..4450c26c06ef 100644 --- a/handler/src/main/java/io/netty/handler/ssl/util/ThreadLocalInsecureRandom.java +++ b/handler/src/main/java/io/netty/handler/ssl/util/ThreadLocalInsecureRandom.java @@ -16,13 +16,14 @@ package io.netty.handler.ssl.util; +import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.ThreadLocalRandom; import java.security.SecureRandom; import java.util.Random; /** - * Insecure {@link java.security.SecureRandom} which relies on {@link ThreadLocalRandom} for random number generation. + * Insecure {@link SecureRandom} which relies on {@link ThreadLocalRandom} for random number generation. */ final class ThreadLocalInsecureRandom extends SecureRandom { @@ -95,6 +96,6 @@ public double nextGaussian() { } private static Random random() { - return ThreadLocalRandom.current(); + return PlatformDependent.threadLocalRandom(); } } diff --git a/handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java b/handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java index 19411127cd8f..08a05cc7b16f 100644 --- a/handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java +++ b/handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java @@ -21,7 +21,7 @@ import io.netty.handler.ssl.ApplicationProtocolConfig.SelectorFailureBehavior; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; import io.netty.handler.ssl.util.SelfSignedCertificate; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Assume; import org.junit.BeforeClass; import org.junit.Test; @@ -142,7 +142,7 @@ public void testWrapBuffersNoWritePendingError() throws Exception { ByteBuffer src = allocateBuffer(1024 * 10); byte[] data = new byte[src.capacity()]; - ThreadLocalRandom.current().nextBytes(data); + PlatformDependent.threadLocalRandom().nextBytes(data); src.put(data).flip(); ByteBuffer dst = allocateBuffer(1); // Try to wrap multiple times so we are more likely to hit the issue. diff --git a/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java b/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java index 6aa9d1f75382..df72e0744942 100644 --- a/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java +++ b/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java @@ -41,7 +41,7 @@ import io.netty.util.concurrent.Future; import io.netty.util.concurrent.Promise; import io.netty.util.internal.EmptyArrays; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -223,7 +223,7 @@ protected ByteBuffer allocateBuffer(int len) { case Heap: return ByteBuffer.allocate(len); case Mixed: - return ThreadLocalRandom.current().nextBoolean() ? + return PlatformDependent.threadLocalRandom().nextBoolean() ? ByteBuffer.allocateDirect(len) : ByteBuffer.allocate(len); default: throw new Error(); @@ -248,7 +248,7 @@ public ByteBuf buffer() { case Heap: return allocator.heapBuffer(); case Mixed: - return ThreadLocalRandom.current().nextBoolean() ? + return PlatformDependent.threadLocalRandom().nextBoolean() ? allocator.directBuffer() : allocator.heapBuffer(); default: throw new Error(); @@ -263,7 +263,7 @@ public ByteBuf buffer(int initialCapacity) { case Heap: return allocator.heapBuffer(initialCapacity); case Mixed: - return ThreadLocalRandom.current().nextBoolean() ? + return PlatformDependent.threadLocalRandom().nextBoolean() ? allocator.directBuffer(initialCapacity) : allocator.heapBuffer(initialCapacity); default: throw new Error(); @@ -278,7 +278,7 @@ public ByteBuf buffer(int initialCapacity, int maxCapacity) { case Heap: return allocator.heapBuffer(initialCapacity, maxCapacity); case Mixed: - return ThreadLocalRandom.current().nextBoolean() ? + return PlatformDependent.threadLocalRandom().nextBoolean() ? allocator.directBuffer(initialCapacity, maxCapacity) : allocator.heapBuffer(initialCapacity, maxCapacity); default: @@ -339,7 +339,7 @@ public CompositeByteBuf compositeBuffer() { case Heap: return allocator.compositeHeapBuffer(); case Mixed: - return ThreadLocalRandom.current().nextBoolean() ? + return PlatformDependent.threadLocalRandom().nextBoolean() ? allocator.compositeDirectBuffer() : allocator.compositeHeapBuffer(); default: @@ -355,7 +355,7 @@ public CompositeByteBuf compositeBuffer(int maxNumComponents) { case Heap: return allocator.compositeHeapBuffer(maxNumComponents); case Mixed: - return ThreadLocalRandom.current().nextBoolean() ? + return PlatformDependent.threadLocalRandom().nextBoolean() ? allocator.compositeDirectBuffer(maxNumComponents) : allocator.compositeHeapBuffer(maxNumComponents); default: diff --git a/pom.xml b/pom.xml index d39085bbf3fe..b78668870784 100644 --- a/pom.xml +++ b/pom.xml @@ -710,6 +710,7 @@ java.security.cert.CertPathValidatorException$BasicReason java.util.concurrent.ConcurrentLinkedDeque + java.util.concurrent.ThreadLocalRandom java.util.zip.CRC32 diff --git a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsQueryContextManager.java b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsQueryContextManager.java index 9c3946c72fb3..25a84ef3c97c 100644 --- a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsQueryContextManager.java +++ b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsQueryContextManager.java @@ -19,7 +19,7 @@ import io.netty.util.NetUtil; import io.netty.util.collection.IntObjectHashMap; import io.netty.util.collection.IntObjectMap; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import java.net.Inet4Address; import java.net.Inet6Address; @@ -41,7 +41,7 @@ final class DnsQueryContextManager { int add(DnsQueryContext qCtx) { final IntObjectMap contexts = getOrCreateContextMap(qCtx.nameServerAddr()); - int id = ThreadLocalRandom.current().nextInt(1, 65536); + int id = PlatformDependent.threadLocalRandom().nextInt(65536 - 1) + 1; final int maxTries = 65535 << 1; int tries = 0; diff --git a/resolver-dns/src/main/java/io/netty/resolver/dns/ShuffledDnsServerAddressStream.java b/resolver-dns/src/main/java/io/netty/resolver/dns/ShuffledDnsServerAddressStream.java index 9b1f24138c6b..b0e2f0e85cff 100644 --- a/resolver-dns/src/main/java/io/netty/resolver/dns/ShuffledDnsServerAddressStream.java +++ b/resolver-dns/src/main/java/io/netty/resolver/dns/ShuffledDnsServerAddressStream.java @@ -16,7 +16,7 @@ package io.netty.resolver.dns; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import java.net.InetSocketAddress; import java.util.Random; @@ -34,7 +34,7 @@ final class ShuffledDnsServerAddressStream implements DnsServerAddressStream { private void shuffle() { final InetSocketAddress[] addresses = this.addresses; - final Random r = ThreadLocalRandom.current(); + final Random r = PlatformDependent.threadLocalRandom(); for (int i = addresses.length - 1; i >= 0; i --) { InetSocketAddress tmp = addresses[i]; diff --git a/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java b/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java index cd032e4add92..2223a9a56d6a 100644 --- a/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java +++ b/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java @@ -35,9 +35,9 @@ import io.netty.resolver.ResolvedAddressTypes; import io.netty.util.NetUtil; import io.netty.util.concurrent.Future; +import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.SocketUtils; import io.netty.util.internal.StringUtil; -import io.netty.util.internal.ThreadLocalRandom; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; import org.apache.directory.server.dns.DnsException; @@ -371,7 +371,7 @@ public Set getRecords(QuestionRecord question) throws DnsExcepti if (EXCLUSIONS_RESOLVE_A.contains(name)) { continue; } - if (ThreadLocalRandom.current().nextBoolean()) { + if (PlatformDependent.threadLocalRandom().nextBoolean()) { overridenHostnames.add(name); } } diff --git a/resolver-dns/src/test/java/io/netty/resolver/dns/TestDnsServer.java b/resolver-dns/src/test/java/io/netty/resolver/dns/TestDnsServer.java index e410c0009036..6232b54c097c 100644 --- a/resolver-dns/src/test/java/io/netty/resolver/dns/TestDnsServer.java +++ b/resolver-dns/src/test/java/io/netty/resolver/dns/TestDnsServer.java @@ -16,7 +16,7 @@ package io.netty.resolver.dns; import io.netty.util.NetUtil; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.apache.directory.server.dns.DnsException; import org.apache.directory.server.dns.DnsServer; import org.apache.directory.server.dns.io.encoder.DnsMessageEncoder; @@ -237,7 +237,7 @@ private static final class TestRecordStore implements RecordStore { } private static int index(int arrayLength) { - return Math.abs(ThreadLocalRandom.current().nextInt()) % arrayLength; + return Math.abs(PlatformDependent.threadLocalRandom().nextInt()) % arrayLength; } private static String nextDomain() { @@ -276,19 +276,19 @@ public Set getRecords(QuestionRecord questionRecord) { case A: do { rm.put(DnsAttribute.IP_ADDRESS, nextIp()); - } while (ThreadLocalRandom.current().nextBoolean()); + } while (PlatformDependent.threadLocalRandom().nextBoolean()); break; case AAAA: do { rm.put(DnsAttribute.IP_ADDRESS, nextIp6()); - } while (ThreadLocalRandom.current().nextBoolean()); + } while (PlatformDependent.threadLocalRandom().nextBoolean()); break; case MX: int priority = 0; do { rm.put(DnsAttribute.DOMAIN_NAME, nextDomain()); rm.put(DnsAttribute.MX_PREFERENCE, String.valueOf(++priority)); - } while (ThreadLocalRandom.current().nextBoolean()); + } while (PlatformDependent.threadLocalRandom().nextBoolean()); break; default: return null; diff --git a/resolver/src/main/java/io/netty/resolver/RoundRobinInetAddressResolver.java b/resolver/src/main/java/io/netty/resolver/RoundRobinInetAddressResolver.java index f87c3886f870..f505328a394b 100644 --- a/resolver/src/main/java/io/netty/resolver/RoundRobinInetAddressResolver.java +++ b/resolver/src/main/java/io/netty/resolver/RoundRobinInetAddressResolver.java @@ -19,7 +19,7 @@ import io.netty.util.concurrent.Future; import io.netty.util.concurrent.FutureListener; import io.netty.util.concurrent.Promise; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.UnstableApi; import java.net.InetAddress; @@ -98,6 +98,6 @@ public void operationComplete(Future> future) throws Exception } private static int randomIndex(int numAddresses) { - return numAddresses == 1 ? 0 : ThreadLocalRandom.current().nextInt(numAddresses); + return numAddresses == 1 ? 0 : PlatformDependent.threadLocalRandom().nextInt(numAddresses); } } diff --git a/testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketFileRegionTest.java b/testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketFileRegionTest.java index 6b7ad3ca0e5e..67742f71f3b0 100644 --- a/testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketFileRegionTest.java +++ b/testsuite/src/main/java/io/netty/testsuite/transport/socket/SocketFileRegionTest.java @@ -26,7 +26,7 @@ import io.netty.channel.DefaultFileRegion; import io.netty.channel.FileRegion; import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Test; import java.io.File; @@ -45,7 +45,7 @@ public class SocketFileRegionTest extends AbstractSocketTest { static final byte[] data = new byte[1048576 * 10]; static { - ThreadLocalRandom.current().nextBytes(data); + PlatformDependent.threadLocalRandom().nextBytes(data); } @Test @@ -104,7 +104,7 @@ private static void testFileRegion0( file.deleteOnExit(); final FileOutputStream out = new FileOutputStream(file); - final Random random = ThreadLocalRandom.current(); + final Random random = PlatformDependent.threadLocalRandom(); // Prepend random data which will not be transferred, so that we can test non-zero start offset final int startOffset = random.nextInt(8192); diff --git a/transport-udt/src/test/java/io/netty/test/udt/util/UnitHelp.java b/transport-udt/src/test/java/io/netty/test/udt/util/UnitHelp.java index 24a411b40b61..38b686d2da04 100644 --- a/transport-udt/src/test/java/io/netty/test/udt/util/UnitHelp.java +++ b/transport-udt/src/test/java/io/netty/test/udt/util/UnitHelp.java @@ -18,8 +18,8 @@ import com.barchart.udt.SocketUDT; import com.barchart.udt.StatusUDT; +import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.SocketUtils; -import io.netty.util.internal.ThreadLocalRandom; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; @@ -222,7 +222,7 @@ public static String property(final String name) { public static int[] randomIntArray(final int length, final int range) { final int[] array = new int[length]; - final Random generator = ThreadLocalRandom.current(); + final Random generator = PlatformDependent.threadLocalRandom(); for (int i = 0; i < array.length; i++) { array[i] = generator.nextInt(range); } diff --git a/transport/src/main/java/io/netty/channel/DefaultChannelId.java b/transport/src/main/java/io/netty/channel/DefaultChannelId.java index 6a506bbe4325..96a4e22bfca9 100644 --- a/transport/src/main/java/io/netty/channel/DefaultChannelId.java +++ b/transport/src/main/java/io/netty/channel/DefaultChannelId.java @@ -21,7 +21,6 @@ import io.netty.util.internal.MacAddressUtil; import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.SystemPropertyUtil; -import io.netty.util.internal.ThreadLocalRandom; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; @@ -146,7 +145,7 @@ private static int defaultProcessId() { } if (pid < 0) { - pid = ThreadLocalRandom.current().nextInt(); + pid = PlatformDependent.threadLocalRandom().nextInt(); logger.warn("Failed to find the current process ID from '{}'; using a random value: {}", value, pid); } @@ -177,7 +176,7 @@ private DefaultChannelId() { i = writeLong(i, Long.reverse(System.nanoTime()) ^ System.currentTimeMillis()); // random - int random = ThreadLocalRandom.current().nextInt(); + int random = PlatformDependent.threadLocalRandom().nextInt(); i = writeInt(i, random); assert i == data.length; diff --git a/transport/src/test/java/io/netty/channel/nio/NioSocketChannelTest.java b/transport/src/test/java/io/netty/channel/nio/NioSocketChannelTest.java index fc75dda4757b..04195e9c4525 100644 --- a/transport/src/test/java/io/netty/channel/nio/NioSocketChannelTest.java +++ b/transport/src/test/java/io/netty/channel/nio/NioSocketChannelTest.java @@ -34,7 +34,7 @@ import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.util.CharsetUtil; import io.netty.util.NetUtil; -import io.netty.util.internal.ThreadLocalRandom; +import io.netty.util.internal.PlatformDependent; import org.junit.Test; import java.io.DataInput; @@ -170,7 +170,7 @@ private static void testChannelReRegisterRead(final boolean sameEventLoop) throw // Just some random bytes byte[] bytes = new byte[1024]; - ThreadLocalRandom.current().nextBytes(bytes); + PlatformDependent.threadLocalRandom().nextBytes(bytes); Channel sc = null; Channel cc = null;