一、背景
假如有这样一个需求,有3个村庄,但是只要一个水源,3个村里面的人想要用水,只能自己各自去取水,假如是每个村民自己买水泵去取水,但是这样的方式是很麻烦而且资源浪费。假如是你,你会怎么去解决这个问题呢?
解决方法:我们是不是可以修水渠,将水引入到各村民附近(就好比天然气管道一样),这样是不是就不需要各自去取水了呢?虽然这个解决方式也没多么高明,但是这确实解决了问题,将问题类比到网络后台,是不是也会遇到同样的问题,要是我们获取对象每次都需要自己去建request对象,这样岂不是很麻烦。于是ThreadLocal诞生了,相当于上述的水渠,为的就是能够共享对象(水源):
ThreadLocal解决的思想是,将数据放在一个线程中,我们要使用该对象,直接在线程里拿即可。
二、使用方法
(1)新建一个线程
public class TestThreadLocal {
private static ThreadLocal<User> testThreadLocal =
new ThreadLocal<User>();
//存入ThreadLocal的方法
public static void setUser(User user){
testThreadLocal.set(user);
}
//获取数据
public static User getUesr(){
return testThreadLocal.get();
}
}
(2)使用共享的对象
TestThreadLocal.setUser(user);