ThreadLocal为每个使用这个变量的线程提供一个独立的变量副本。每个线程都可以独立地改变这个副本,并且相互不会有影响。
ThreadLocal和synchronized的区别
它们都是用于解决并发访问问题的,但两者存在本质的区别。
ThreadLocal:
1.采用“以空间换时间”的方式。每个线程提供一份变量,互相不影响。
2.只能使用Object类型,不能使用原子类型。
3.用于线程间的数据隔离。
synchronized:
1.采用“以时间换空间”的方式。提供一份变量,让线程排队进行访问。
2.synchronized可作用于变量、对象引用、static函数和类名称字面常量上。
3.用于线程间的数据共享。
ThreadLocal的使用场景
1.存储线程上下文context
2.去除与业务逻辑无关的参数,防止接口污染。