threadLocal笔记
什么是threadLocal
threadLocal用于处理数据的隔离性,多个线程同时访问一个变量时,可能会出现错误的变量信息。这个时候可以使用线程同步机制处理或者使用threadlocal进行处理。
线程同步机制和threadlocal之间的区别
线程同步实现的是时间换空间,threadlocal实现的是空间换时间。
- 线程同步:在一个线程进行访问时,会进行加锁,加锁之后其他的线程无法对该变量进行操作,只有在当前线程操作完毕后,释放锁,其他线程才能进行操作。
- threadlocal:为线程提供一个独立的变量副本,这个变量副本的可用性只限制为当前线程。这个操作需要消耗空间。
ThreadLocal<String> threadlocal= new ThreadLocal();
threadlocal.set("张三"); //添加变量到threadlocal中
String name = threadlocal.get(); //获取threadlocal中的值
threadlocalMap
使用threadlocal进行修饰的变量是保存到threadlocalmap中,当前threadlocalmap对应的是当前线程的变量副本。threadlocalMap并不是map结构,他不具备链接,threadlocalmap的结构是数组结构。每一个数组单位存放的是一个Entry,存放的数据同样是以key-value的形式进行存储。key值使用的是弱引用,key值与变量的threadlocal对象相对应。