ThreadLocal 很多人都用过,今天是升级版的InheritableThreadLocal,具体有什么区别,demo看效果就知道了。
public static void main(String[] args) {
String name="小明";
ThreadLocalContext.getContext().setValue(name);
InheritableThreadLocalContext.getContext().setValue(name);
System.out.println("******************"+ThreadLocalContext.getContext().getValue());
System.out.println("******************"+InheritableThreadLocalContext.getContext().getValue());
new Thread(()->{
System.out.println("---------------------"+ThreadLocalContext.getContext().getValue());
System.out.println("---------------------"+InheritableThreadLocalContext.getContext().getValue());
}).start();
}
两个实例顺便附上
public class ThreadLocalContext {
private ThreadLocalContext(){}
/**
* 实例化对象
*/
private static final ThreadLocalContext context = new ThreadLocalContext();
public static ThreadLocalContext getContext(){
return context;
}
private static final ThreadLocal<String> myLocal = new ThreadLocal<>();
/**
* 设置对象
* @param value
*/
public void setValue(String value){
myLocal.set(value);
}
/**
* 获取对象
* @return
*/
public String getValue(){
return myLocal.get();
}
/**
* 移除对象
*/
public void remove(){
myLocal.remove();
}
}
public class InheritableThreadLocalContext {
private InheritableThreadLocalContext(){}
private static final InheritableThreadLocalContext context = new InheritableThreadLocalContext();
public static InheritableThreadLocalContext getContext(){
return context;
}
private static final InheritableThreadLocal<String> myLocal = new InheritableThreadLocal();
/**
* 设置对象
* @param value
*/
public void setValue(String value){
myLocal.set(value);
}
/**
* 获取对象
* @return
*/
public String getValue(){
return myLocal.get();
}
/**
* 移除对象
*/
public void remove(){
myLocal.remove();
}
}