为什么原生的servlet是线程不安全的而Struts2是线程安全的?
2017-08-06 11:11
561 查看
因为原生的servlet在整个application生命周期中,只在初次访问的时候实例化一次,以后都不会再实例化,只会调用Server方法进行响应,所以如果在servlet类中定义成员变量,那么就会让每个访问的用户的都共享了此成员变量数据,既然是共享,那么任何一个人修改都会造成其他人数据的改变,所以servlet年代,成员变量是不能作为参数存放的,只能在具体每个线程访问的方法中单独获取方法定义变量接收才能保证线程安全,而Struts2是每次request访问时都会实例化一次对应action,当前的action和request线程是绑定的,所以每次访问都有对应的独立Action类,保证了Action的线程安全,那么当然可以在定义成员属性变量中定义参数接收了,所以也可以得出Action的生命周期也就是一次request请求时间,而servlet的生命周期是整个application期间
相关文章推荐
- struts2,servlet的线程安全问题
- 确保真正的线程安全——微软为什么不提供线程安全库
- servlet、struts1和struts2的线程安全问题
- servlet、struts1和struts2的线程安全问题
- Servlet为什么是线程不安全的?
- Java线程安全系列(1)--Servlet线程安全
- 线程安全和线程不安全
- Servlet和JSP的线程安全问题
- servlet的实例变量是线程不安全的,而其JSP也默认是以多线程方式执行(原创)
- 拿来主义:java中的线程安全与非线程安全,以及如何使用和实现
- Servlet的线程安全问题
- Servlet线程安全相关问题
- 针对Servlet的线程安全问题
- 【Java】为什么HashMap是线程不安全的及其他
- servlet 的线程安全问题解析
- Java arraylist线程不安全 vectory 线程安全
- PHP的线程安全与非线程安全版本的区别
- HashMap为什么是线程不安全的?
- 怎么理解Stringbuffer是线程安全的stringbuilder是线程不安全的
- 什么是线程安全和线程不安全