ThreadLocal 介绍及原理

2019-08-14  本文已影响0人  路Promenade

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);

4.ThreadLocal原理

上一篇下一篇

猜你喜欢

热点阅读