1.为什么要用 ThreadLocal
问题场景一:高并发的时候,我们在调用一些公有的对象资源的时候,会有线程安全问题
解决线程安全问题
方法一:对全局变量进行加锁。缺点是其他线程要使用的话,就必须等待,耗时。
方法二:把全局变量变成局部方法变量。这样就解决了线程安全问题。
问题场景二:我既要解决安全问题,我又要实现全局共享呢?
全局变量会造成线程安全问题,加锁会对性能有影响,设置为局部变量,那么就不能在各个方法中使用了。
我们现在需要一个:既能够共用,但又不是全局变量线程安全的东西,仿佛是局部定义的变量能够在各个方法中重用一样
这个时候就可以使用ThreadLocal来解决既能够共用,又不会造成线程安全的问题
2.什么是 ThreadLocal
ThreadLocal是一个关于创建线程局部变量的类
通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。
而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改
ThreadLocal类比喻全局存放数据的盒子,盒子中可以存储每个线程的私有数据
3.如何使用ThreadLocal
// 1.创建,支持泛型
ThreadLocal<String> stringThreadLocal = new ThreadLocal<>();
// 2.set方法
stringThreadLocal.set("lugq");
// 3.get方法
String s = stringThreadLocal.get();
Log.i(TAG, "S:" + s);