Java实现threadLocal线程池获取

 更新时间:2023年07月28日 09:57:22   作者:清晨细雨~  
本文主要介绍了Java实现threadLocal线程池获取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

问题:

ThreadLocal默认不支持子线程获取,而InheritableThreadLocal支持子线程获取threadLocal值,但是如果使用线程池,核心个数为1则子线程会获取到上一个threadLocal的值。

解决:

1.引入transmittable-thread-local jar

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

2. threadLocal 初始化

private static final TransmittableThreadLocal<User> CURRENT_USER_HOLDER = new TransmittableThreadLocal();

3. Executor bean,使用TtlExecutor

@Bean(value = "defaultThreadPool")
    public Executor buildQueueThreadPool() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        int cpuNum = Runtime.getRuntime().availableProcessors();
        // 设置核心线程数
        executor.setCorePoolSize(Math.min(cpuNum * 2, 16));
        // 设置最大线程数
        executor.setMaxPoolSize(cpuNum * 2);
        //队列中最大的数目
        executor.setQueueCapacity(300);
        //线程名称前缀
        executor.setThreadNamePrefix("defaultThreadPool_");
        //rejection-policy:当pool已经达到max size的时候,如何处理新任务
        //CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
        //对拒绝task的处理策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //线程空闲后的最大存活时间
        executor.setKeepAliveSeconds(60);
        //加载
        executor.initialize();
        return TtlExecutors.getTtlExecutor(executor);
    }

到此这篇关于Java实现threadLocal线程池获取的文章就介绍到这了,更多相关Java threadLocal线程池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot隐式参数注入的码优雅升级指南

    SpringBoot隐式参数注入的码优雅升级指南

    这篇文章主要为大家详细介绍了SpringBoot中隐式参数注入的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-03-03
  • minio安装部署及使用的详细过程

    minio安装部署及使用的详细过程

    MinIO是一个基于Apache License v2.0开源协议的对象存储服务,下面这篇文章主要给大家介绍了关于minio安装部署及使用的详细过程,文中通过实例代码以及图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 详解Java事件编程的使用

    详解Java事件编程的使用

    Java事件在很多地方都可以使用,合理的使用事件编程,相比常规逻辑的编程,这可达到主次分明,让程序吞吐量即处理能力更强,改动更少,下面我们举一个例子说明如何使用Java使用,需要的朋友可以参考下
    2021-06-06
  • Java编程将汉字转Unicode码代码示例

    Java编程将汉字转Unicode码代码示例

    偶然看到Unicode编码,觉得挺有意思,于是搜索了相关资料,准备学习学习,本文主要是一个Unicode编码的简单Java实现,需要的朋友可以了解下。
    2017-10-10
  • Windows环境下Java版本管理终极攻略(彻底告别JDK版本地狱)

    Windows环境下Java版本管理终极攻略(彻底告别JDK版本地狱)

    JDK是Oracle公司提供的用于Java程序开发的完整软件包,它是Java开发者不可或缺的核心工具,包含了编写、编译、调试和运行Java程序所需的一切组件,这篇文章主要介绍了Windows环境下Java版本管理终极攻略的相关资料,需要的朋友可以参考下
    2026-06-06
  • Java基于控制台界面实现ATM系统

    Java基于控制台界面实现ATM系统

    这篇文章主要为大家详细介绍了Java基于控制台界面实现ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • java 面向对象代码块及不同位置对属性赋值的执行顺序

    java 面向对象代码块及不同位置对属性赋值的执行顺序

    这篇文章主要介绍了java面向对象代码块及不同位置对属性赋值的执行顺序,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • springboot项目之相互依赖报错问题(基于idea)

    springboot项目之相互依赖报错问题(基于idea)

    这篇文章主要介绍了springboot项目之相互依赖报错问题(基于idea),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java的Jackson库的使用及其树模型的入门学习教程

    Java的Jackson库的使用及其树模型的入门学习教程

    这篇文章主要介绍了Java的Jackson库的使用及其树模型入门学习教程,Jackson库通常被用来作Java对象和JSON的互相转换,需要的朋友可以参考下
    2016-01-01
  • SpringMVC配置多个properties文件之通配符解析

    SpringMVC配置多个properties文件之通配符解析

    这篇文章主要介绍了SpringMVC配置多个properties文件之通配符解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论