diff --git a/protocol/src/main/java/com/zfoo/protocol/util/FastThreadLocalAdapter.java b/protocol/src/main/java/com/zfoo/protocol/util/FastThreadLocalAdapter.java new file mode 100644 index 00000000..15dec1d4 --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/util/FastThreadLocalAdapter.java @@ -0,0 +1,29 @@ +package com.zfoo.protocol.util; + +import io.netty.util.concurrent.FastThreadLocal; + +import java.util.function.Supplier; + +/** + * @author godotg + */ +public class FastThreadLocalAdapter { + + private FastThreadLocal fastThreadLocal; + + private Supplier supplier; + + public FastThreadLocalAdapter(Supplier supplier) { + this.supplier = supplier; + this.fastThreadLocal = new FastThreadLocal<>() { + @Override + protected T initialValue() { + return supplier.get(); + } + }; + } + + public T get() { + return Thread.currentThread().isVirtual() ? supplier.get() : fastThreadLocal.get(); + } +}