ThreadLocal模式

ThreadLocal模式很常用,主要是解决不同层次数据共享问题。

那么,在看struts2的源码的时候,发现struts2中应用了ThreadLocal模式,所以在此进行一下心得。
说道这里就不得不提一下,线程安全问题。大家都知道对于同一个serlet对象的多个请求,servlet的service方法在一个多线程环境下是不安全的,也就是我们所说的单例。

那么为了解决这个问题,Struts2采用了ThreadLocal模式来维护变量。

我们来看一下Thread。java的源码:

public class Thread implements Runnable {

ThreadLocal.ThreadLoaclMap threadLocals=null;

}

这里的ThradLocalMap 跟随者当前的线程而存在。也就是每一个线程独一份。

那么map中存的是当前线程实例对象。

这里提一下ThreadLocal和Synchronized的区别:一个是以空间换取时间,一个是以时间换取空间。ThreadLocal提供了线程安全的共享对象机制,synchronized是通过JVM的锁机制来实现临界区的函数和变量的访问的原子性。

struts2通用引入xwork框架,将整个http请求过程拆分成与web容器相关和与web容器无关的两个执行阶段。而这两个阶段的数据交互就是通过ThreadLocal模式中的线程共享副本安全的进行。


ThreadLocal的优点就是:实现了一个共享环境。所以这个共享环境会跨越多个开发层次而随处存在。

当然,这样多个层次都有依赖,也就是耦合到了一起,从而无法独立测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值