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

使用 ThreadLocal 在项目中 出现报错

严重 [http-nio-8080-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke

具体问题可以查看我提问题的链接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> 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.htmlJava并发线程之ThreadLocal使用严重 [http-nio-8080-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke_第1张图片
这里重启Tomcat运行成功,我的编辑器提示我划线的部分可以用其他代码代替提示

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

你可能感兴趣的:(Java)