美文网首页
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