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.ThreadLocalinitialValue()
*/
@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();
}
將所有ThreadLocal 放入一個Wrapper中,防止記憶體洩漏,這樣在Web容器undeploy時,透過 ServletRequestListener -> requestDestroyed() 呼叫該類的destroy()即可銷燬所有的ThreadLocal變數:
public class ThreadLocalUtil {
private final static ThreadLocal<ThreadVariables> THREAD_VARIABLES = new ThreadLocal<ThreadVariables>() {
/**
* @see java.lang.ThreadLocalinitialValue()
*/
@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();
}
[該貼被banq於2012-10-11 15:28修改過]
相關文章
- ThreadLocal在java web工程中的使用。threadJavaWeb
- Web Worker在專案中的妙用Web
- Web專案中預覽PDFWeb
- Java Web之MySQL在專案中的使用JavaWebMySql
- web專案中圖示的前端處理方案Web前端
- 【SSM】WEB專案中的中文亂碼問題SSMWeb
- web專案中web.xml的servlet和servletmapping的解讀WebXMLServletAPP
- Redis 在 Web 專案中的應用與實踐RedisWeb
- Redis在Web專案中的應用與實踐RedisWeb
- 防止web專案中的SQL隱碼攻擊MUHEWebSQL
- Python 中的 web 常見框架(Django 專案1)PythonWeb框架Django
- myeclipse的web專案匯入到eclipse中EclipseWeb
- IntelliJ IDEA中建立Web聚合專案(Maven多模組專案)IntelliJIdeaWebMaven
- mvn 建立java專案 web專案JavaWeb
- web開發實戰教程:Apache Shiro在web專案中的應用WebApache
- Web 專案的快取策略Web快取
- Java中的引用與ThreadLocalJavathread
- Java中的ThreadLocal詳解Javathread
- maven 建立web專案MavenWeb
- 讓Web專案中Velocity的#parse支援相對路徑Web
- maven新建Spring MVC + MyBatis + Oracle的Web專案中pom.xml檔案MavenSpringMVCMyBatisOracleWebXML
- Jenkins在Java web專案CI/CD中的簡單應用JenkinsJavaWeb
- VS Code中建立.NET Core的Web專案並使用Watch去除錯Web除錯
- java web專案中classes資料夾下的class和WEB-INF/lib中jar裡的class檔案載入順序JavaWebJAR
- Java Web系列:Java Web 專案基礎JavaWeb
- Golang初學:新建專案 及 gin web 專案GolangWeb
- Java中ThreadLocal的用法和原理Javathread
- Java中的ThreadLocal深入理解Javathread
- docker部署Web專案(二)DockerWeb
- nodejs搭建web專案NodeJSWeb
- Maven--搭建Web專案MavenWeb
- web專案開發流程Web
- Tomcat部署web專案TomcatWeb
- Maven Web專案構建MavenWeb
- [轉]Web專案管理思考Web專案管理
- Flask web專案 gunicorn部署FlaskWeb
- idea建立web專案IdeaWeb
- Azure Web App (一)釋出你的Net Core Web 專案WebAPP