spring 线程池中,如何使用theadlocal上下文

Posted 蟑螂恶霸的开发笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 线程池中,如何使用theadlocal上下文相关的知识,希望对你有一定的参考价值。

依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>transmittable-thread-local</artifactId>
</dependency>

使用

public class AsyncThreadPoolConfiguration implements AsyncConfigurer 

    @Override
    public Executor getAsyncExecutor() 
        ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
        // TODO 配置具体参数
        threadPool.initialize();

        // 重点:使用 TTL 提供的 TtlExecutors
        return TtlExecutors.getTtlExecutor(threadPool);
    

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() 
        return new SimpleAsyncUncaughtExceptionHandler();
    


public final class ThreadContext 
    // 只需替换 InheritableThreadLocal 为 TransmittableThreadLocal 即可
    private static final ThreadLocal<Long> USER_ID_LOCAL = new TransmittableThreadLocal<>();

    public static Long getUserId() 
        return USER_ID_LOCAL.get();
    

    public static void setUserId(Long userId) 
        USER_ID_LOCAL.set(userId);
    

    public static void clear() 
        USER_ID_LOCAL.remove();
    

 

转自  https://www.jianshu.com/p/4093add7f2cd

 

以上是关于spring 线程池中,如何使用theadlocal上下文的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Gateway中netty线程池优化

Java基础干货如何优雅关闭线程池实践总结

如何判断线程池中的线程是否全部执行完毕

如何判断线程池中的线程是否全部执行完毕

TransmittableThreadLocal相关组件实用解读,及如何达到线程池中的线程复用,及使用在哪些线程数据传递场景?

Spring线程池ThreadPoolTaskExecutor学习总结