ThreadLocal原理:
ThreadLocal是线程的局部变量,实现原理是Thread类中有一个ThreadLocalMap类的threadlocals变量,此变量是属于当前线程的,key为代码中声明的ThreadLocal变量,value为线程要保存的变量副本。
Threadlocal解决的不是线程间共享变量的问题,而是解决线程内全局变量的参数传递问题,即线程内的共享变量,并且线程绝对安全。
Threadlocal接口的4种使用方法:
1.void set( ):设置当前局部变量的值
2.get( ): 返回当前线程所对应的局部变量
3.remove( ): 将当前线程的局部变量值移除,可以减少内存的占用,防止内存溢出
4.initialValue( ):返回该线程局部变量的初始值,这个方法是一个延迟调用方法,在线程第1次调用get()或set(Object)时才执行,并且仅执行1次。
ThreadLocal 与 Synchonized的比较
两者都可以用于解决多线程的并发访问,synchronized是用于线程间的数据共享,利用锁的机制,使变量或代码块在某一时刻只能被一个线程訪问 ,而ThreadLocal是用于线程间的数据隔离,为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享