Java并发线程之ThreadLocal使用严重 [http-nio-8080-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke

匿名 (未验证) 提交于 2019-12-02 21:53:52

使用 ThreadLocal 在项目中 出现报错

具体问题可以查看我提问题的链接https://bbs.csdn.net/topics/392383155
这里贴上我的解决方法

package com.gem.struts.core;  import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map;  public class ActionContext {     private ThreadLocal<Map<String, Object>> threadLocal = ThreadLocal.withInitial(() -> new HashMap<>());      private static ActionContext context = new ActionContext();      public static ActionContext getContext() {         return context;     }      public void setRequest(HttpServletRequest request) {         threadLocal.get().put("request", request);     }      public void setResponse(HttpServletResponse response) {         threadLocal.get().put("response", response);     }      public HttpServletRequest getRequest() {         return (HttpServletRequest) threadLocal.get().get("request");     }      public HttpServletResponse getResponse() {         return (HttpServletResponse) threadLocal.get().get("response");     } } 

很感谢 我那帖子的回答者,他最后那段代码,提到了线程Tomcat问题,于是乎在百度搜索相关内容,链接https://www.cnblogs.com/dolphin0520/p/3920407.html
这里重启Tomcat运行成功,我的编辑器提示我划线的部分可以用其他代码代替

根据它的提示我又在百度上搜了关于 ThreadLocal.withInitial()
链接https://www.cnblogs.com/protected/p/7395717.html 最后看到的就是我贴上去的代码了,貌似这种写法是在8之后有的。总之问题解决了,起码项目每个功能都能跑起来,如果有更好的解决方法和思路,可以互相交流……

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!