Struts2 控制器的线程安全问题

探讨Struts2框架中的线程安全问题,如何通过Spring的@Scope(prototype)解决控制器实例的并发访问问题,以及在DAO和服务层中潜在的线程安全挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts2 控制器的线程安全问题

原理:

为每个请求创建一个控制器实例即可解决线程并发安全问题! 在使用Spring时候务必使用 @Scope("prototype") 属性.

在struts2中,每一个请求都会有一个单独线程,该线程里会有单独的action,若使用Spring管理Struts2,则用以上@Scope("prototype") 方法解决(即在Action类前面添加该标签)

问题:

1.dao接口会有线程安全问题吗? 肯定是没有的,例如云笔记项目,dao是单例的,无状态的,安全的;

2.service中会有线程安全问题吗?可能存在的,若业务方法之间没有使用公共变量,就不会有问题(service的方法不访问公共变量即可),但是web层时可能存在公共变量的,例如session、application,这是多线程并发访问的,所以在访问这类变量的时候需要加锁,synchronized或者使用队列来处理

多线程问题

  1. Web应用是并发访问的
  2. 当多个并发访问了同一个数据时候将出现并发安全性问题
    • 尽量并发解决问题, 性能好
    • 必要的时候使用同步处理, 性能差
  3. 超过300并发, 应该采用服务器集群解决
    • Tomcat 默认值是 200

无状态类: 没有公共的可读写的实例变量的类, 没有线程安全问题 有状态类: 有公共的可读写实例变量类, 有线程安全问题.

在云笔记,controller是单例的,存在线程安全问题,但是Controller类没有成员变量,就是为了避免线程安全问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值