






















用户要跨方法访问变量,但若变量是全局变量的话虽然能访问了,但可能会产生并发问题,这时可以把要共享的值放入ThreadLocal中,线程内都能访问到,但所有线程访问却只能访问自己的,无法访问其他线程的,这就相当于线程私有的共享变量
ThreadLocal相当于在内部做了线程识别,哪条线程放进该全局变量的数据,只有该线程才能访问。
Thread类有个属性,持有ThreadLocal的静态内部类ThreadLocalMap的引用,放进来的值就存放在这里。ThreadLocal的常用操作get/set/remove中,都是先根据Thread.currentThread()获取当前线程这个对象,然后根据这个对象获取其属性中ThreadLocalMap的引用threadLocals,这个map以当前线程作为key,放进的值作为value来存取,因此当前线程只能获取当前线程放进去的值了,从而达到识别线程的效果。
这更多是一种技巧,而不是技术,其并非是什么语言新特性,不过是封装了这些手段和技巧,从而达到了对于不了解的人来说像java语言的一种特性一样,甚至java的特性不过也是对更底层的一种封装而已。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。