ThreadLocal的相关知识
1.ThreadLocal原理
ThreadLocal一般称为线程本地变量,是一个特殊的线程绑定机制,将线程和变量绑定在一起,为每一个线程维护一个独立的变量副本。通过ThreadLocal可以将对象的可见范围限制在同一个线程内,而不会和其他线程的副本冲突。
最常见的ThreadLocal应用场景为
1.用来解决 数据库连接、session管理
2.缓存经常需要的对象
3.使用线程保持状态(用户id、事务id、日志-id)
2.怎样去判断获取线程里的哪些数据?
不用线程的话,普通传参就得一层层传过去才能使用。
引用
用线程的话如:redis(单线程)。先去redis服务器查看是否有数据,有就直接用,没有的话会全部进行修改、查询。
任何一层,redis在查询时是不能传参的;不管在哪,只要在同个线程就可以找到它传的值,同一个线程可以拿线程里的东西。
3.ThreadLocal的好处
https://www.cnblogs.com/xrq730/p/4854820.html
1.安全性好,区分线程(不带任何传参形式),方便获取参数,不需要再像传统的一层层传参,降低了耦合性、嵌入性。
ThreadLocal.ThreadLocalMap是线程独有的,别的线程访问不了也没必要访问,通过ThreadLocal把HttpServletRequest设置到线程的ThreadLocal.ThreadLocalMap里面去,在一次请求中哪里需要用到HttpServletRequest,就使用ThreadLocal的get()方法就把这个HttpServletRequest给取出来了。
2.每个线程里都有自己的key存到Map里,并且互不影响,绝不会出现值重复的情况。
因为ThreadLocal.ThreadLocalMap中table的某一位置的值会被你设置的最新value值覆盖。
4.ThreadLocal的基本用法
先继承Thread类,重写run方法,再写几个线程往里传值,在main里启动线程。