Threadlocal
本文主要介绍ThreadLocal的基本使用与底层原理,欢迎大家相互学习与指正。
1.ThreadLocal定义
ThreadLocal是线程的局部变量,即使用ThreadLocal可以使用变量成为当前线程所独有的,对其他线程隔离。
ThreadLocal提供线程本地的实例,它与普通线程的区别:每个使用该变量的线程都会初始化一个完成独立的实例副本。
ThreadLocal变量通常用private static修饰,适用于变量在线程间隔离而在方法与类间共享的情况。
2.ThreadLocal与synchronized的区别:
都可以解决多线程并发访问的安全问题。
sy用于线程间数据的共享,th用于线程间数据的隔离。
sy利用锁机制,使变量或代码块某一时刻只能被一个线程访问,th为线程都提供了变量的副本。
3.ThreadLocal底层
ThreadLocal是一个对象,数据真正是存放在ThreadLocal内部的类型为ThreadLocalMap的一个map上,由Thread管理(Thread.threadlocals)
ThreadLocalMap将数据以Entry的键值对的形式保存,key是ThreadLocal,value是我们要保存的值。
ThreadLocalMap表的初始长度是16,当长度大于当前表长度^2/3时就扩容,扩容为原来的两倍。
Entry在table中的索引根据Thr