Threadlocal
Threadlocal 是jdk提供的一个除了加锁外的另外一种线程并发安全的东西。
Threadlocal 和 Synchonized的比较
这两者都是解决线程并发安全的问题。
- Synchonized是通过上锁的方式,使某个变量或者某个方法,在某一个时刻只能被一个线程访问到。
- Threadlocal 是通过为每个线程都提供了变量的副本,使每个线程在某一个时刻访问到的,并非同一个对象。
源码
基本上常用到的估计也就这4个方法。看看这玩意里面到底怎么玩的。
get,set方法操作的 都是取到了 ThreadLocalMap。那么ThreadLocalMap是个啥东西?
其实这个玩意在Thread是一个属性
这个类定义在ThreadLocal里面的一个静态内部类。
真正存储数据的是ThreadLocalMap里面的Entry。 Entry里的value值就是我们操作时所存储的值。
所存的值都在这entry数组里。
说白了,就是当某个线程get 或者 set的时候,取到的都是当前线程的ThreadLocalMap,其实就是拿到 每个线程独有的 ThreadLocalMap。然后再用 ThreadLocal 的当前实例,拿到 Map 中的相应的 Entry,然后就可以拿到相应的值返回出去。当然,如果 Map 为空,还会先进行 map 的创建,初始化等工作。