打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Web项目中的ThreadLocal

Threading stories: ThreadLocal in web applications - Java Code Geeks

将所有ThreadLocal 放入一个Wrapper中,防止内存泄漏,这样在Web容器undeploy时,通过 ServletRequestListener -> requestDestroyed() 调用该类的destroy()即可销毁所有的ThreadLocal变量:


public class ThreadLocalUtil {

private final static ThreadLocal<ThreadVariables> THREAD_VARIABLES = new ThreadLocal<ThreadVariables>() {

/**
* @see java.lang.ThreadLocal#initialValue()
*/
@Override
protected ThreadVariables initialValue() {
return new ThreadVariables();
}
};

public static Object getThreadVariable(String name) {
return THREAD_VARIABLES.get().get(name);
}

public static Object getThreadVariable(String name, InitialValue initialValue) {
Object o = THREAD_VARIABLES.get().get(name);
if (o == null) { 
THREAD_VARIABLES.get().put(name, initialValue.create());
return getThreadVariable(name);
} else {
return o;
}
}

public static void setThreadVariable(String name, Object value) {
THREAD_VARIABLES.get().put(name, value);
}

public static void destroy() {
THREAD_VARIABLES.remove();
}
}

public class ThreadVariables extends HashMap<String, Object> { }

public abstract class InitialValue {

public abstract Object create();

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ThreadLocal的设计与使用
java中ThreadLocal类的使用
Java之ThreadLocal
赌十包辣条,你一定没见过这么通透的ThreadLocal讲解
理解ThreadLocal
研究java.lang.ThreadLocal类
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服