`

threadlocal变量在tomcat环境中的使用

阅读更多

在tomcat中,我们可能希望一个变量对于request有效,通过设置filter把变量值保存到threadlocal当中,程序里面再进行使用是一个解决方法。

最近碰到一个问题,由于filter退出的时候没有清理,在某些不应当获得threadlocal值的场合,也能获得值!

通过研究发现,这根tomcat的线程池有关。新来一个request以后,tomcat通过线程池获得一个线程,对request进行处理。由于threadlocal变量在filter中进行设置,实际上是设置到tomcat线程当中。当该线程被其他的request使用的时候,就获得该结果了。

因此我们要注意threadlocal的使用,注意它不是和request生命期相同,而是挂到tomcat thread当中。

分享到:
评论

相关推荐

    运行在tomcat容器中的ThreadLocal容易产生的问题

    然而,在特定环境下,如Tomcat这样的Servlet容器中,不恰当使用ThreadLocal可能会导致一些问题。 首先,我们要理解Tomcat的工作原理。在处理Web请求时,Tomcat会创建一个线程池来处理来自客户端的HTTP请求。当一个...

    ThreadLocal 内存泄露的实例分析1

    总结:`ThreadLocal` 是一个强大的工具,但在使用时必须谨慎,尤其是在多线程环境中,如 Tomcat 这样的 Web 容器。如果不正确地管理 `ThreadLocal` 的生命周期,可能导致类加载器级别的内存泄漏。理解 `ThreadLocal`...

    Tomcat中一种半通用回显方法 - 先知社区1

    总结:本文介绍了一种利用Java反射技术在Tomcat中获取并修改HTTP响应的方法,这涉及到对Tomcat内部机制的理解以及对Java反射API的运用。这种技术在某些场景下可以用于调试或测试,但在生产环境中需要谨慎使用,以免...

    Java单线程ThreadLocal串值问题解决方案

    例如,在doGood方法中,我们使用了try-finally块来确保ThreadLocal变量currentUid的释放,从而避免了线程池中占用的资源。 Tomcat线程池机制 Tomcat服务器使用了线程池机制来管理线程池中的线程,以提高服务器的...

    tomcat中多线程对于servlet处理的4篇资料

    在这个主题中,我们将深入探讨"Tomcat中多线程对于Servlet处理"的相关知识点,特别关注在5.5.17版本中的实现。 1. **Tomcat的线程模型** Tomcat使用了一个基于Apache Commons Daemon的JVM服务模型,其中包含了...

    tomcat并发资料

    9. **Tomcat的线程局部变量(ThreadLocal)使用**:ThreadLocal可以帮助减少数据同步,但过度使用可能导致内存泄漏,需要谨慎。 10. **监控与日志**:使用JMX监控Tomcat运行状态,通过日志分析性能瓶颈,是优化并发...

    实例详解Java中ThreadLocal内存泄露

    然而,如果不正确地使用ThreadLocal,可能会导致内存泄露,尤其是在Java EE容器如Tomcat中。本文将深入探讨这个问题,并提供解决方案。 在问题背景部分,我们看到一个示例,其中`LeakingServlet`类内部使用了一个...

    基于全局储存的新思路 _ Tomcat的一种通用回显方法研究1

    为解决这一问题,文章引述了@kingkk师傅的研究,即通过反射修改Tomcat内部的控制变量,使请求处理过程中将Request和Response存储在ThreadLocal中,从而在反序列化时获取Response。 然而,这种方法受到Tomcat请求...

    Servlet是线程不安全的1

    "Servlet线程不安全" Servlet是一种线程不安全的组件,它的线程不安全性体现...Servlet的线程不安全性是由于多线程环境下共享一个实例变量导致的,而解决方法是使用ThreadLocal变量或其他同步机制来避免线程安全问题。

    Servlet线程安全问题.docx

    3. **ThreadLocal变量**:对于需要在多线程环境中保持独立状态的变量,可以使用`ThreadLocal`类来为每个线程创建独立的副本。 4. **使用无状态Servlet**:设计无状态的Servlet,即Servlet不持有任何可能被多个线程...

    hibernate中session的管理

    在`TestServlet`的例子中,我们创建一个ThreadLocal类型的`localSession`变量,然后在`doGet`方法中将从SessionFactory获取的Session保存到ThreadLocal中。在`doSomething`方法中,我们通过ThreadLocal的`get`方法...

    第19章 Tomcat服务器和Servlet.pdf

    - 使用线程局部变量(ThreadLocal)。 - 使用同步方法或同步块控制并发访问。 - 避免实例变量,使用局部变量或类成员变量(静态final)。 总结,本章主要介绍了Tomcat服务器、Servlet以及相关知识,包括它们的概念...

    servlet是如何同时处理多个请求的

    - 如果Servlet需要存储请求相关的数据,可以使用ThreadLocal变量,这样每个线程都有自己独立的数据副本,避免了线程间的数据冲突。 通过理解以上概念,开发者可以更好地编写高效且线程安全的Servlet,以适应高并发...

    走向架构师之路

    8. **ThreadLocal**:ThreadLocal是Java中用于线程局部变量的类,它可以为每个线程创建独立的变量副本,避免多线程环境下共享数据引发的并发问题。但在大型系统中,合理使用并注意内存泄漏是必要的。 9. **基于...

    1工作临时-servlet 多线程问题

    - `ThreadLocal`类可以用来为每个线程提供独立的变量副本,从而在多线程环境中避免冲突。在Servlet中,可以考虑使用`ThreadLocal`来存储线程私有的数据。 6. **线程池**: - 在高并发场景下,使用线程池可以有效...

    spring boot 多数据源项目

    通常,我们可以在方法执行前动态设置ThreadLocal变量,从而在同一个线程内的后续数据库操作中自动选择正确的数据源。 6. **Thymeleaf模板引擎**:Thymeleaf允许在HTML中使用表达式语言,将后台数据绑定到前端页面。...

    jsp线程学习上课代码

    本"jsp线程学习上课代码"的资源可能是为了教授如何在JSP中使用和管理线程,帮助开发者深入理解这一主题。源码的提供是为了让学生或初学者能够实际操作,从而更好地理解和学习。下面将详细探讨JSP与线程的相关知识点...

    软件开发文档.doc

    在文档中,我们可以看到使用了Apache Tomcat服务器中的`context.xml`配置文件来设置连接池。 1. `context.xml`配置文件中,`<Resource>`元素定义了一个名为`jdbc/cs`的数据源,它包含了数据库驱动(`driverClassName...

    java 内存泄露

    2. **利用工具定位并修复**:借助于前面提到的诊断工具,定位到具体的内存泄露源,并针对性地修改代码,比如清理不再使用的对象引用,合理使用各种类型的引用,以及正确管理ThreadLocal变量。 3. **定期进行系统...

Global site tag (gtag.js) - Google Analytics