我有一个操作数据库的类 TestDAO在Spring中可配置 TestDAO 类为 单实例或着多实例(我看很多的教程设置的是单实例)而struts2中每一个请求会创建一个对象...那 struts2 通过 Spring来调用TestDAO 类的方法,不就会出现线程问题了????
解决方案 »
- 使用eclipse问题 jdk问题 高分!!
- 如何用java来实现银行系统
- 流OR三大框架
- 调用wsdl文件出错。
- 100分求与【java EE 5 开发】或【java EE 5 中框架】或【Linux 服务器 配置维护】深度中等偏下的经典书籍,荐者有分!
- WebLogic+JBuliderX怎么配置?不会一直要手动吧!
- 初学者,如下问题是何原因,请指教
- Datasource有什么好处,提升性能?
- 有人用axis吗?
- 日志量比较大 大概有10台记录日志的服务器 如何用log4j每小时每台日志服务器生成一个日志文件
- 请高手帮忙,小弟感激不尽,弄了很长时间都没弄出来,谢谢
- Hibernate3 +Oracle10g 集群,hibernate配置文件中如何编写连接参数
那不是说..所有的struts2 的请求要1个1个的执行???
那还用struts2 干什么呢?直接struts1算了...
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题,实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题.
这只是线程问题上struts2的优势,之所以用它,因为它还有很多其他的优势,最体现的就是它的OGNL语言,所以你不能单一的说还用它干吗,要了解它所有和struts1的区别及该进.:~)
Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题.
Struts2 Action对象为每一个请求产生一个实例,但是这些实例都调用了
Spring中配置为 单实例 TestDAO 类..如果 , Struts2 Action请求产生实例,比如2个请求 调用了 TestDAO 保存数据.
应为TestDAO 为单实例,应该很容易出现问题.比如 第1个 请求用TestDAO 保存一半的时候 暂停了,
第2个 请求 TestDAO 保存了数据.然后 第1个 继续,因为
他们是公用了1个TestDAO所以应该会有问题吧
只要TestDAO不是线程安全的,
struts,spring再怎么线程安全都没用。
线程安全遵循不同原理,一个流程的环节上有一环不安全,整个流程就不安全。所谓线程安全,是要有范围的,比如说一个对象,不可能一个框架整个都是线程安全的。Struts1、2、spring,都是多线程的,不可能后台同时只处理一个请求,那样没有项目能用得起来。struts1是每个Action一个实例,但多个Action可以并发处理。
回头又看到这个帖子 上面是文档里的定义 以为你看了会明白:)
其实 你还是不了解 struts1是单例模式就是为了确保它的线程是安全的
而strtus2 由于是Action对象为每一个请求产生一个实例 所以无所谓线程安不安全的问题
如果要像你这么去做 2个请求同时调用TestDao 那此时整体线程安不安全就已经下线到你的TestDao 如果此时你的TestDao内对线程加以控制了那就是安全 如果没有那整体当然还是不安全,但struts2的线程确一直是安全的,因为它为每一个请求产生了一个实例!
不一定吧,没设置参数吗?
07年看的structs2.忘差不多了。就记得配置文件太多,,,其实,有环境的话做个简单测试就出来了