美文网首页
ThreadLocal实战(三:TransmittableThr

ThreadLocal实战(三:TransmittableThr

作者: 但时间也偷换概念 | 来源:发表于2018-08-30 20:40 被阅读0次

    引子

    上两篇博客讲了ThreadLocal和InheritableThreadLocal,InheritableThreadLocal能够进行父子线程数据传递,但它也有缺陷,比如线程池搭配ThreadLocal问题。ThreadLocal在线程池场景下,会因为线程池核心线程的复用性,带来“脏数据”。

    样例:

    接着上篇博客的案例,我现在使用InheritableThreadLocal搭配线程池使用,模拟开发中的场景。

    线程池复用问题 线程池配置

    如上图,我设置了核心线程数为1的线程池,那么在线程池核心线程闲置的时候,将复用核心线程,所以第二次启动线程的时候,并没有创建新的线程,于是我在主线程remove ThreadLocal以后,第二个线程还是打印第一个线程的上下文环境出来了。

    这就是线程池情况下复用线程带来的脏数据问题

    当我们换上ttl

    TransmittableThreadLocal TransmittableThreadLocal测试结果

    成功解决此问题。

    核心操作两步:

    1.包裹TtlExecutors

    2.使用TransmittableThreadLocal

    TtlExecutors

    TtlExecutors就是做了一层wrapper

    项目代码:https://github.com/Spring5945/Concurrent

    相关文章

      网友评论

          本文标题:ThreadLocal实战(三:TransmittableThr

          本文链接:https://www.haomeiwen.com/subject/hvndwftx.html