ThreadLocal浅谈

最近在工作中,有用到ThreadLocal类,在我的另外一篇博客中,也提到了一些:


ThreadLocal简单定义

那么,ThreadLocal到底是什么呢?

结合业务场景来解释说明,比如说我们现在需要统计用户发请求的IP地址,获取值可能是在别的地方。那么在同时A用户发了一个请求,ip地址是10.10.10.10,B用户发送了一个请求,ip地址是10.10.10.12,那么在存储和获取的时候,我们怎么知道什么时候应该获取10,什么时候该获取12呢。假设每一个请求访问时一个线程,那么ThreadLocal是为了解决A线程拥有自己的一个对象,B线程拥有自己的对象。A对象记录着自己的10,B对象记录着自己的12,获取的时候,同一个请求相当于同一个线程,A请求会取出ip10.10.10.10,B会取出10.10.10.12。

看源码:


ThreadLocal源码一

内部是通过每次set的时候都new一个对象,然后利用一个map类去维护。此时的map也不是简单的map,是一个内部类,源码也在ThreadLocal类中。

主要参考的博客有:

http://www.cnblogs.com/dolphin0520/p/3920407.html

http://www.iteye.com/topic/103804

https://www.ibm.com/developerworks/cn/java/j-threads/index3.html

你可能感兴趣的:(ThreadLocal浅谈)