使用FastThreadLocal替代ThreadLocal

This commit is contained in:
zhouhao
2022-12-01 11:28:46 +08:00
parent 6bed54f029
commit 6659068dfd
5 changed files with 40 additions and 6 deletions

View File

@@ -118,7 +118,12 @@
<dependency>
<artifactId>jctools-core</artifactId>
<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>
</dependencies>

View File

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

View File

@@ -1,5 +1,6 @@
package org.hswebframework.web.i18n;
import io.netty.util.concurrent.FastThreadLocal;
import lombok.AllArgsConstructor;
import org.hswebframework.web.exception.I18nSupportException;
import org.reactivestreams.Publisher;
@@ -34,7 +35,7 @@ public final class LocaleUtils {
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();

View File

@@ -1,11 +1,18 @@
package org.hswebframework.web.id;
import io.netty.util.concurrent.FastThreadLocal;
import java.util.Base64;
import java.util.concurrent.ThreadLocalRandom;
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() {

View File

@@ -1,5 +1,6 @@
package org.hswebframework.web.utils;
import io.netty.util.concurrent.FastThreadLocal;
import org.apache.commons.codec.binary.Hex;
import java.security.MessageDigest;
@@ -8,9 +9,27 @@ import java.util.function.Supplier;
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) {
return digest(md5::get, digestHandler);