Browse Source

使用FastThreadLocal替代ThreadLocal

zhouhao 2 years ago
parent
commit
6659068dfd

+ 6 - 1
hsweb-core/pom.xml

@@ -118,7 +118,12 @@
         <dependency>
         <dependency>
             <artifactId>jctools-core</artifactId>
             <artifactId>jctools-core</artifactId>
             <groupId>org.jctools</groupId>
             <groupId>org.jctools</groupId>
-            <version>2.1.2</version>
+            <version>4.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-common</artifactId>
         </dependency>
         </dependency>
 
 
     </dependencies>
     </dependencies>

+ 2 - 0
hsweb-core/src/main/java/org/hswebframework/web/context/ContextUtils.java

@@ -17,6 +17,7 @@ public class ContextUtils {
         return contextThreadLocal.get();
         return contextThreadLocal.get();
     }
     }
 
 
+    @Deprecated
     public static Mono<Context> reactiveContext() {
     public static Mono<Context> reactiveContext() {
         return Mono
         return Mono
                 .subscriberContext()
                 .subscriberContext()
@@ -32,6 +33,7 @@ public class ContextUtils {
                 }));
                 }));
     }
     }
 
 
+    @Deprecated
     public static Function<reactor.util.context.Context, reactor.util.context.Context> acceptContext(Consumer<Context> contextConsumer) {
     public static Function<reactor.util.context.Context, reactor.util.context.Context> acceptContext(Consumer<Context> contextConsumer) {
         return context -> {
         return context -> {
             if (!context.hasKey(Context.class)) {
             if (!context.hasKey(Context.class)) {

+ 2 - 1
hsweb-core/src/main/java/org/hswebframework/web/i18n/LocaleUtils.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.i18n;
 package org.hswebframework.web.i18n;
 
 
+import io.netty.util.concurrent.FastThreadLocal;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.hswebframework.web.exception.I18nSupportException;
 import org.hswebframework.web.exception.I18nSupportException;
 import org.reactivestreams.Publisher;
 import org.reactivestreams.Publisher;
@@ -34,7 +35,7 @@ public final class LocaleUtils {
 
 
     public static final Locale DEFAULT_LOCALE = Locale.getDefault();
     public static final Locale DEFAULT_LOCALE = Locale.getDefault();
 
 
-    private static final ThreadLocal<Locale> CONTEXT_THREAD_LOCAL = new ThreadLocal<>();
+    private static final FastThreadLocal<Locale> CONTEXT_THREAD_LOCAL = new FastThreadLocal<>();
 
 
     static MessageSource messageSource = UnsupportedMessageSource.instance();
     static MessageSource messageSource = UnsupportedMessageSource.instance();
 
 

+ 8 - 1
hsweb-core/src/main/java/org/hswebframework/web/id/RandomIdGenerator.java

@@ -1,11 +1,18 @@
 package org.hswebframework.web.id;
 package org.hswebframework.web.id;
 
 
+import io.netty.util.concurrent.FastThreadLocal;
+
 import java.util.Base64;
 import java.util.Base64;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.ThreadLocalRandom;
 
 
 public class RandomIdGenerator {
 public class RandomIdGenerator {
 
 
-    private final static ThreadLocal<byte[]> HOLDER = ThreadLocal.withInitial(() -> new byte[24]);
+    private final static FastThreadLocal<byte[]> HOLDER = new FastThreadLocal<byte[]>() {
+        @Override
+        protected byte[] initialValue() {
+            return new byte[24];
+        }
+    };
 
 
 
 
     public static String random() {
     public static String random() {

+ 22 - 3
hsweb-core/src/main/java/org/hswebframework/web/utils/DigestUtils.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.utils;
 package org.hswebframework.web.utils;
 
 
+import io.netty.util.concurrent.FastThreadLocal;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.codec.binary.Hex;
 
 
 import java.security.MessageDigest;
 import java.security.MessageDigest;
@@ -8,9 +9,27 @@ import java.util.function.Supplier;
 
 
 public class DigestUtils {
 public class DigestUtils {
 
 
-    public static final ThreadLocal<MessageDigest> md5 = ThreadLocal.withInitial(org.apache.commons.codec.digest.DigestUtils::getMd5Digest);
-    public static final ThreadLocal<MessageDigest> sha256 = ThreadLocal.withInitial(org.apache.commons.codec.digest.DigestUtils::getSha256Digest);
-    public static final ThreadLocal<MessageDigest> sha1 = ThreadLocal.withInitial(org.apache.commons.codec.digest.DigestUtils::getSha1Digest);
+    public static final FastThreadLocal<MessageDigest> md5 = new FastThreadLocal<MessageDigest>() {
+        @Override
+        protected MessageDigest initialValue() {
+            return org.apache.commons.codec.digest.DigestUtils.getMd5Digest();
+        }
+    };
+
+    public static final FastThreadLocal<MessageDigest> sha256 = new FastThreadLocal<MessageDigest>() {
+        @Override
+        protected MessageDigest initialValue() {
+            return org.apache.commons.codec.digest.DigestUtils.getSha256Digest();
+        }
+    };
+    ;
+    public static final FastThreadLocal<MessageDigest> sha1 = new FastThreadLocal<MessageDigest>() {
+        @Override
+        protected MessageDigest initialValue() {
+            return org.apache.commons.codec.digest.DigestUtils.getSha1Digest();
+        }
+    };
+    ;
 
 
     public static byte[] md5(Consumer<MessageDigest> digestHandler) {
     public static byte[] md5(Consumer<MessageDigest> digestHandler) {
         return digest(md5::get, digestHandler);
         return digest(md5::get, digestHandler);