线程安全策略(二)——线程封闭

2018-06-03  本文已影响0人  墨平语凡

参考
线程封闭

线程封闭

把对象封装到一个线程里,只有这一个线程能看到这个对象(即使这个对象不是线程安全的也不会出现任何线程安全的问题了,因为只能在一个线程里访问)

实现线程封闭

ThreadLocal 实例保存登录用户信息

public class RequestHolder {
    private final static ThreadLocal<Long> requestHolder = new ThreadLocal<>();

    /**
     * 添加数据
     * 在filter里将登录用户信息存入ThreadLocal
     * 如果不使用ThreadLocal,我们会需要将request一直透传
     * @param id
     */
    public static void add(Long id){
        // ThreadLocal 内部维护一个map,key为当前线程名,value为当前set的变量
        requestHolder.set(id);
    }

    /**
     * 获取数据
     * @return
     */
    public static Long getId(){
        return requestHolder.get();
    }

    /**
     * 移除变量信息
     * 如果不移除,那么变量不会释放掉,会造成内存泄漏
     * 在接口处理完以后进行处理(interceptor)
     */
    public static void remove(){
        requestHolder.remove();
    }
}

上一篇下一篇

猜你喜欢

热点阅读