1 /** 2 * ThreadLocal<T>是Thread的一个属性,它是一个threadlocalmap类型。在一个线程刚开始执行的时候,通过ThreadLocal的set方法将值放在threadlocalmap中,在后面的类的方法中,可以获得map中的值 3 * 常用的用法就是在一个web项目中,通过拦截器先获取请求用户的信息,将其放入SeissonStore(存放user的ThreadLocal), 4 * 然后执行后面的业务代码时,不需要再将user对象作为参数传入 5 * 直接调用get方法就能获取user 6 * 7 * @Attention :因为threadlocal的set方法使将this(本身)放入threadlocalmap中作为key的,所以使用SessionStore的话只能使用单例模式,可以自己实现,或者用spring的方法,getBean,他是默认返回单列的 8 * @author chenq 9 * 2016-7-15 上午10:48:37 10 */ 11 public class StringStoreTest { 12 public static void main(String[] args) { 13 StringStore.get().setString("chenq"); 14 new AnotherClass().print(); 15 } 16 }
1 public class StringStore { 2 3 private final ThreadLocal<String> store = new ThreadLocal<String>(); 4 5 public void setString(String str) { 6 store.set(str); 7 } 8 public String getString() { 9 return store.get(); 10 } 11 12 private StringStore() {}; 13 14 private static StringStore ss = null; 15 16 public static StringStore get() { 17 if (ss == null) { 18 ss = new StringStore(); 19 } 20 return ss; 21 } 22 }
1 public class AnotherClass { 2 3 public void print() { 4 System.out.println(StringStore.get().getString()); 5 } 6 7 }