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。问题通过重启Tomcat解决,并参考了相关博客,采用ThreadLocal.withInitial()的写法,适应Java 8以上版本。寻求更多优化解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 ThreadLocal 在项目中 出现报错

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

具体问题可以查看我提问题的链接https://bbs.youkuaiyun.com/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之后有的。总之问题解决了,起码项目每个功能都能跑起来,如果有更好的解决方法和思路,可以互相交流……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值