struts2 与springmvc深入对比(二)
2015-10-23 16:50
363 查看
接上篇文章,我们知道struts是基于类的,也就是说,客户端每发出一个请求,就会创建一个action,action是多例的,是线程安全的。
而springmvc是基于controller里面的方法的,多线程并发的情况下,多个线程可能同时操作一个controller,对于controller里面的全局变量,实例变量会产生资源掠夺的情况。
对于必须声明使用的实例变量,我们可以采用Threadlocal 来处理。
另外从网络上搜集到可以使用 Collections 工具同步Map。将map转为线程安全的,也是非常好的办法。
static Map<Integer, Users> usersCache = Collections.synchronizedMap(new HashMap<Integer, Users>());
在很多优秀的开源框架的源码中,可以看到他们的设计思想是使用ThreadLocal来处理。
而springmvc是基于controller里面的方法的,多线程并发的情况下,多个线程可能同时操作一个controller,对于controller里面的全局变量,实例变量会产生资源掠夺的情况。
对于必须声明使用的实例变量,我们可以采用Threadlocal 来处理。
另外从网络上搜集到可以使用 Collections 工具同步Map。将map转为线程安全的,也是非常好的办法。
static Map<Integer, Users> usersCache = Collections.synchronizedMap(new HashMap<Integer, Users>());
在很多优秀的开源框架的源码中,可以看到他们的设计思想是使用ThreadLocal来处理。
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- JQuery+Strusts1.x无刷新登录
- C#实现多线程的同步方法实例分析
- Lua中的全局变量、非全局变量总结
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- js DOM 元素ID就是全局变量
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- C#控制台下测试多线程的方法
- Ruby 多线程的潜力和弱点分析
- c语言全局变量和局部变量问题及解决汇总
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- 深入uCOS中全局变量的使用详解
- Ruby 中$开头的全局变量、内部变量、隐藏变量介绍