diff --git a/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java b/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java index 298342526c..09d3d629c5 100644 --- a/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java +++ b/transport/src/main/java/io/netty/channel/DefaultChannelPipeline.java @@ -19,6 +19,7 @@ import io.netty.channel.Channel.Unsafe; import io.netty.util.ReferenceCountUtil; import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.EventExecutorGroup; +import io.netty.util.concurrent.FastThreadLocal; import io.netty.util.internal.OneTimeTask; import io.netty.util.internal.PlatformDependent; import io.netty.util.internal.StringUtil; @@ -46,15 +47,13 @@ final class DefaultChannelPipeline implements ChannelPipeline { static final InternalLogger logger = InternalLoggerFactory.getInstance(DefaultChannelPipeline.class); - @SuppressWarnings("unchecked") - private static final WeakHashMap, String>[] nameCaches = - new WeakHashMap[Runtime.getRuntime().availableProcessors()]; - - static { - for (int i = 0; i < nameCaches.length; i ++) { - nameCaches[i] = new WeakHashMap, String>(); + private static final FastThreadLocal, String>> nameCaches = + new FastThreadLocal, String>>() { + @Override + protected Map, String> initialValue() throws Exception { + return new WeakHashMap, String>(); } - } + }; final AbstractChannel channel; @@ -261,15 +260,12 @@ final class DefaultChannelPipeline implements ChannelPipeline { } private String generateName(ChannelHandler handler) { - WeakHashMap, String> cache = nameCaches[(int) (Thread.currentThread().getId() % nameCaches.length)]; + Map, String> cache = nameCaches.get(); Class handlerType = handler.getClass(); - String name; - synchronized (cache) { - name = cache.get(handlerType); - if (name == null) { - name = generateName0(handlerType); - cache.put(handlerType, name); - } + String name = cache.get(handlerType); + if (name == null) { + name = generateName0(handlerType); + cache.put(handlerType, name); } synchronized (this) {