开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
什么是ThreadLocal
ThreadLocal用百度翻译可以译为:本线程变量,本线程变量说明这个变量次线程独有的,而不是多个线程共享的,也就是说每创建一个线程,新创建的线程都会有这个变量的副本,而且当我们修改这个变量时,只是修改了此线程的变量副本
ThreadLocal有什么用途
1.当我们需要此变量只在当前线程改变,可以使用
2.可以用于线程之间的数据隔离
3.可以使用用于Session的会话管理
以上就是小编知道的用法吗,如果您也知道,可以留言
ThreadLocal如何使用
通常此类只提供两个方法,一个Get()方法,一个Set()方法,顾名思义,这两个方法分别用于得到这个被ThreadLocal修饰的变量和设置这个被ThreadLocal修饰的变量
比如如果我们需要存储当前用户登录的用户ID,我们可以使用以下代码
/**
*
* 此类用于获取和保存当前登录用户id
*/
public class ThreadLocalUserId {
private static ThreadLocal<Long> threadlocal= new ThreadLocal<>();
public static void setCurrentId(Long id){
threadlocal.set(id);
}
public static Long getCurrentId(){
return threadlocal.get();
}
}
小编对ThreadLocal的理解
使用ThreadLocalThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程
- 该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。
- ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量
- 既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题
- ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,
- 每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal
- 变量通常被private static修饰。
- 当一个线程结束时,它所使用的所有 ThreadLocal 相对的副本都可被回收