`
xinyangwjb
  • 浏览: 81781 次
  • 性别: Icon_minigender_1
  • 来自: 信阳
社区版块
存档分类
最新评论

ThreadLocal之一、对其理解的俩大误区

阅读更多
[size=medium][/size]这篇博客,是参考资料后的心得,如有雷同,证明大家都明白了,HoHo

先说线程:
最大的误区,ThreadLocal不是一个本地线程,他是在多线程中的局部变量副本,并且他存在于线程中。

Web容器中有三个周期request/Httpsession/application
其中request是客户端发出的一个请求,这个request的载体就是一个线程,实际等同于一个线程的生命周期。

看jdk实例知道,ThreadLocal是在线程中实现一个线程局部存储。
request是一个线程,而struts和spring这些东西,在request这个线程中要进行一系列的操作,需要一个全局的变量存储地,而且这个变量在不同request线程还会不同,于是就使用到了ThreadLocal。
因此ThreadLocal在正常情况下,与request是同生命周期的,当request线程结束,ThreadLocal就会等待被回收。

ThreadLocal具体怎么实现的不就再赘述,再说说web中具体的误区与应用

原本:ThreadLocal是线程局部存储,每个请求只能访问本线程中设置的变量。
如果没有web容器,每次request请求都会新创建一个新的独立的线程,当请求结束后,java虚拟机会将该ThreadLocal删除。

但是一般应用服务器都会有一个高效的线程池系统来回收已完成处理的请求线程,也就是说当某个请求被处理完后,相应线程并不会被销毁,而是被返回到线程池中以再次响应其它请求。即多个请求为一个线程。这就麻烦了。下一个用户使用的是上一个用户的TreadLocal线程,怎么办?
解决办法是在每次新用户登录,线程创建的时候,先清空该线程,然后再将数据放进去,等这次web请求结束后,再将该线程清空
具体实现需要webFilter的帮助
分享到:
评论

相关推荐

    理解ThreadLocal

    理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal

    ThreadLocal的几种误区

    总之,ThreadLocal是一个强大的工具,但理解其工作原理和潜在风险至关重要。正确使用ThreadLocal可以提高代码的并发性能,而滥用则可能导致难以预料的问题。因此,在使用ThreadLocal时,需要充分考虑其生命周期管理...

    ThreadLocal应用示例及理解

    **线程局部变量(ThreadLocal)是Java编程中一个非常重要的工具类,它在多线程环境下提供了线程安全的数据存储。ThreadLocal并不是一个变量,而是一个类,它为每个线程都创建了一个独立的变量副本,使得每个线程都...

    正确理解ThreadLocal.pdf

    ### 正确理解ThreadLocal:深入解析其工作原理与应用场景 #### 一、ThreadLocal的基本概念 `ThreadLocal`是Java平台提供的一种线程局部变量的解决方案,它为每一个使用该变量的线程都提供了独立的变量副本,使得每...

    JDK的ThreadLocal理解(一)使用和测试

    **标题:“JDK的ThreadLocal理解(一)使用和测试”** **正文:** ThreadLocal是Java中的一个非常重要的线程安全工具类,它在多线程编程中扮演着独特的角色。通过创建ThreadLocal实例,我们可以为每个线程提供一个...

    ThreadLocal

    在使用ThreadLocal时,理解其工作原理和限制是非常重要的。合理的使用能够帮助我们编写出更高效、更易于维护的多线程程序,但也要避免滥用,因为它可能会引入难以察觉的并发问题和内存管理问题。

    理解threadlocal

    为了更直观地理解`ThreadLocal`的工作原理,我们可以创建一个简单的`SimpleThreadLocal`类。下面是一个基本的实现: ```java public class SimpleThreadLocal<T> { private Map, T> valueMap = new HashMap(); ...

    ThreadLocal的简单理解.doc

    下面是对 ThreadLocal 的简单理解。 一、背景 最近有人问我 ThreadLocal 是如何做到在每个线程中的值都是隔离的,于是写下这篇文章来简单记录下。 二、ThreadLocal 解决的问题 ThreadLocal 解决了一个重要的问题...

    threadLocal

    ThreadLocal是Java编程语言中的一个线程局部变量类,它为每个线程提供了一个独立的变量副本,使得每个线程可以独立地改变...通过阅读和理解这些资料,开发者可以深化对ThreadLocal的理解,并将其有效地应用于项目中。

    设计模式及ThreadLocal资料

    本资料主要聚焦于两种设计模式以及Java中的ThreadLocal特性。 首先,我们来探讨单例模式。单例模式是一种确保一个类只有一个实例,并提供全局访问点的设计模式。在Java中,通常通过私有构造函数、静态工厂方法或...

    深入理解 Java 之 ThreadLocal 工作原理1

    当我们创建一个ThreadLocal实例并调用其set方法时,实际上是将值与当前线程关联起来。每个线程都有一个ThreadLocalMap,这是ThreadLocal内部的一个静态内部类,用来存储ThreadLocal对象和它们对应的值。 在...

    java事务 - threadlocal

    ThreadLocal的使用方法是创建一个ThreadLocal实例,然后通过其set()方法设置线程局部变量,get()方法获取当前线程的该变量值。需要注意的是,ThreadLocal不是线程安全的,它只是保证了线程内部的隔离性,但不负责...

    ThreadLocal 内存泄露的实例分析1

    但这里,`ThreadLocal` 的设计使得其内部的引用(即使是最弱的引用)在类加载器试图卸载时依然存在,这就形成了一个内存泄漏点。 解决这个问题的关键在于,我们需要确保在不再需要 `ThreadLocal` 变量时,及时清除...

    彻底理解ThreadLocal 1

    ThreadLocal是Java中用于线程局部变量的一个工具类,它允许在多线程环境下为每个线程创建独立的变量副本,从而避免了线程之间的数据共享和由此引发的并发问题。ThreadLocal不是一种线程同步机制,而是提供了一种线程...

    ThreadLocal深度理解

    ThreadLocal深度理解

    java 简单的ThreadLocal示例

    Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,尤其在处理线程间数据隔离和共享时。ThreadLocal不是线程本身,而是为每个线程提供一个独立的变量副本,使得每个线程都可以独立地改变...

    java中ThreadLocal类的使用

    Java中的`ThreadLocal`类是一个非常实用的工具,它提供了线程局部变量的功能。线程局部变量意味着每个线程都拥有自己独立的变量副本,互不干扰,这在多线程编程中尤其有用,可以避免数据共享带来的同步问题。下面...

    ThreadLocal整理.docx

    ThreadLocal 是 Java 中的一个重要组件,它能够在每个线程中保持独立的副本。这个功能是通过 Thread 类中的 threadLocals 属性来实现的,这个属性实际上是一个 Entry 数组,其中的每个 Entry 都是一个弱引用,易于...

Global site tag (gtag.js) - Google Analytics