线程---ThreadLocal

ThreadLocal

就是一个Map

key就是 Thread.getCurrentThread().

value就是线程需要保存的变量

 

ThreadLocal.set(value) 相当于 map.put(Thread.getCurrentThread(),value)

ThreadLocal.get() 相当于map.get(Thread.getCurrentThread());

内存问题:在并发量高的时候,可能有内存溢出。

使用Threadlocal的时候注意回收资源,每个线程结束前,将当前线程保存的线程变量一定删除 ThreadLocal.remove();否则容易引起内存泄露。

只有当所有的线程都被回收时,ThreadLocal才被回收。

在一个操作系统中,线程和进程是有数量限制的,在操作系统中,确定线程和进程唯一性 的唯一条件就是线程或进程 的ID。

操作系统在回收线程或进程的时候,不是一定杀死线程或进程,在繁忙的时候,只会做清空线程或进程栈数据的操作,重复使用线程或进程。

ThreadLocal对象是放在堆内存中,是所有线程共享的。回收线程的同时,ThreadLocal可能并没有被回收,这时如果没有清除ThreadLocal的数据,而新创建的线程的Id又与之前存储过数据的线程的ID相同的话,就会取到之前线程的数据。

原文地址:https://www.cnblogs.com/hg1205/p/12653678.html