ThreadLocal优化方案

大家好,我是贠学文,点击右上方“关注”,每天为您分享java程序员需要掌握的知识点干货。

凌晨四点的北京

大家都知道,我们在用ThreadLocal的时候,如果用完的时候没有及时清理,很容易引发内存泄漏和数据错乱,可能会产生很严重的生产事故,所以我们在用完以后,一定要及时手动清理。

但是如果我在一个线程里,创建了多个ThreadLocal,然后我在手动清理的时候,我就漏清几个怎么办,因为虽然你漏清了,但是在开发环境和测试环境测试的时候,未必一定能测出问题,但是一旦到生产,就会产生很严重的事故。

所以这时我就在想,jdk里有没有一种机制,可以自动把当前线程创建的所有的ThreadLocal全部清理掉,不需要我们自己去手动清理呢,这样就可以避免这个问题,于是我就去查看了一下ThreadLocal的源码,还真的没有这个机制,这个也是我觉得jdk做的不够好的地方。

那既然jdk没有提供,那就只好我们自己实现了,于是我自己写了一个对ThreadLocal管理的工具类,在这个类里,可以对当前线程创建的所有的ThreadLocal做统一管理,也提供了一个清理的方法,这个清理的方法会把当前线程创建的ThreadLocal全部清理掉。然后在拦截器的aftercompletion中,去调用这个清理方法,这样就实现了自动清理,不需要去手动清理,也不需要担心因为漏清而引发的生产问题了。但是对于一些不会走拦截器的一些线程,比如定时任务,我也做个封装,可以实现自动清理。

工具类代码如下图所示:


ThreadLocal工具类代码

往期精彩:

一篇文章掌握程序员的技术体系

作者介绍:

贠学文,具有多有经验的java开发工程师,业余时间利用头条分享技术知识点与自己对技术的感悟,帮助对自己未来感到迷茫的程序员,在技术上得到提升。结识一些志同道合的朋友,相互促进,共同进步。

展开阅读全文

页面更新:2024-04-30

标签:知识点   线程   程序员   事故   机制   代码   环境   方案   工具   方法   技术

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top