简单介绍一下ThreadLocal的原理:
1.ThreadLocal会为每一个线程维护一个和该线程绑定的实例变量的副本
2.因为每一个线程都拥有自己独立的实例变量副本,而不会和其它线程的副本冲突
ThreadLocal的应用场合是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。
1: 在HttpServlet中, 是单实例多线程的,每个request的请求携带多个参数,这么把参数放到一个地方,然后可以再dao或者service层中取到呢:
一般的做法是一直传下去:
ThreadLocal:
public class LocalContext {
private static final ThreadLocal <LocalContext> contexts = new ThreadLocal <LocalContext>();
private String uid;
private String clientType;
.....
public static LocalContext getContext() {
LocalContext context = contexts .get();
if (context == null) {
context = new LocalContext();
contexts .set(context);
}
return context;
}
}
把你公共的参数放到LocalContext, LocalContext模式
中;