package org.springside.modules.utils.concurrent; import java.util.HashMap; import java.util.Map; /** * 存储于ThreadLocal的Map, 用于存储上下文.<br/> * * 但HashMap<String,Object>的存储其实较为低效,在高性能场景下可改为EnumMap<br/> * * 1.先定义枚举类,列举所有可能的Key<br/> * 2.替换contextMap的创建语句,见下例<br/> * 3.修改put()/get()中key的类型<br/> * * <pre> * private static ThreadLocal<Map<MyEnum, Object>> contextMap = new ThreadLocal<Map<MyEnum, Object>>() { * @Override * protected Map<MyEnum, Object> initialValue() { * return new EnumMap<MyEnum, Object>(MyEnum.class); * } * }; * </pre> */ public class ThreadLocalContext { private static ThreadLocal<Map<String, Object>> contextMap = new ThreadLocal<Map<String, Object>>() { @Override protected Map<String, Object> initialValue() { // 降低loadFactory减少冲突 return new HashMap<String, Object>(16, 0.5f); } }; /** * 放入ThreadLocal的上下文信息. */ public static void put(String key, Object value) { contextMap.get().put(key, value); } /** * 取出ThreadLocal的上下文信息. */ @SuppressWarnings("unchecked") public static <T> T get(String key) { return (T) (contextMap.get().get(key)); } /** * 清理ThreadLocal的Context内容. */ public static void reset() { contextMap.get().clear(); } }