servlet线程不安全 高并发下会出现线程安全问题 那么struts2和springmvc中的action有线程安全问题吗

时间:2020-12-04 17:59:30
servlet线程不安全 高并发下会出现线程安全问题  那么struts2和springmvc中的action有线程安全问题吗

7 个解决方案

#1


struts2的线程算是挺安全的,action是一个请求,一个实例,因此基本上没有线程安全问题;
spring mvc或许线程不太安全,Controller是单例的吧;

#2


http://blog.csdn.net/generalyy0/article/details/7003974

注解和性能没有关系,Servlet的生命周期是这样的,在调用这个Servlet时候才创建这个Servlet的类并运行init()方法,然后另外有人运行这个Servlet的时候并没有重启创建Servlet和运行里边的init()方法,所以Servlet容器时单利的,spring就是Servlet的封装的框架,包括所有的依赖注入都是在tomcat启动的时候全部被初始化的,其他的注解也一样,也就是说注解也就是以前的xml的配置的替代,以前没个请求都要运行一次xml吗?并不是的,xml是在tomcat启动时就读一次而已并利用里边的配置初始化很多的东西,然后就不在使用了,因为都成了单利的,这样就保证了效率,不是每次都把我们要注入的全部new一次,而是tomcat启动的时候全部new一次以后就不new了,保证了效率问题。


所以我不明白那个 光看注解就知道性能不好?
注解就是替代了xml配置而已,而且也是初始化一次,也就是说和编写Servlet一样的在init()中做了很多的事而已,并且以后不会在运行init()了,除非你重启tomcat。

struts1也一样,运行一个action的方法的时候创建一个action类,以后再运行就不会创建了,其实也是Servlet的封装的框架。

struts2特殊一些,没个请求要new一个action来保证线程安全。所以效率会低一些,但是不会低的特别离谱。

这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的,struts2的确实是线程安全的。

#3


问的好。。学习一下。。

#4


线程安不安全  就看你有没有全局的变量   如果你没有类中定义的变量   那就都是安全的

#5


引用 2 楼 kky2010_110 的回复:
http://blog.csdn.net/generalyy0/article/details/7003974

注解和性能没有关系,Servlet的生命周期是这样的,在调用这个Servlet时候才创建这个Servlet的类并运行init()方法,然后另外有人运行这个Servlet的时候并没有重启创建Servlet和运行里边的init()方法,所以Servlet容器时单利的,spring就是Servlet的封装的框架,包括所有的依赖注入都是在tomcat启动的时候全部被初始化的,其他的注解也一样,也就是说注解也就是以前的xml的配置的替代,以前没个请求都要运行一次xml吗?并不是的,xml是在tomcat启动时就读一次而已并利用里边的配置初始化很多的东西,然后就不在使用了,因为都成了单利的,这样就保证了效率,不是每次都把我们要注入的全部new一次,而是tomcat启动的时候全部new一次以后就不new了,保证了效率问题。


所以我不明白那个 光看注解就知道性能不好?
注解就是替代了xml配置而已,而且也是初始化一次,也就是说和编写Servlet一样的在init()中做了很多的事而已,并且以后不会在运行init()了,除非你重启tomcat。

struts1也一样,运行一个action的方法的时候创建一个action类,以后再运行就不会创建了,其实也是Servlet的封装的框架。

struts2特殊一些,没个请求要new一个action来保证线程安全。所以效率会低一些,但是不会低的特别离谱。

这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的,struts2的确实是线程安全的。
受教了  根据你的总结 struts2是安全的 每个request是不同的action   struts1和springmvc是线程不安全的  

#6


好好学习一下 

#7


引用 5 楼 u014039623 的回复:
Quote: 引用 2 楼 kky2010_110 的回复:

这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的,struts2的确实是线程安全的。
受教了  根据你的总结 struts2是安全的 每个request是不同的action   struts1和springmvc是线程不安全的  

确实是这样的,最近在研究多线程问题,我看到一本好书推荐给你,叫做java多线程设计模式
http://www.cnblogs.com/gaotianle/archive/2013/09/07/3306971.html
这个博主把代码实现了一遍,我建议自己再实现一遍哪怕抄写一遍,会对多线程有更清晰的认识。
看java源码也可以比如面试当中较多的问题vector和arraylist的区别就有线程安全的知识,祝学习愉快。

#1


struts2的线程算是挺安全的,action是一个请求,一个实例,因此基本上没有线程安全问题;
spring mvc或许线程不太安全,Controller是单例的吧;

#2


http://blog.csdn.net/generalyy0/article/details/7003974

注解和性能没有关系,Servlet的生命周期是这样的,在调用这个Servlet时候才创建这个Servlet的类并运行init()方法,然后另外有人运行这个Servlet的时候并没有重启创建Servlet和运行里边的init()方法,所以Servlet容器时单利的,spring就是Servlet的封装的框架,包括所有的依赖注入都是在tomcat启动的时候全部被初始化的,其他的注解也一样,也就是说注解也就是以前的xml的配置的替代,以前没个请求都要运行一次xml吗?并不是的,xml是在tomcat启动时就读一次而已并利用里边的配置初始化很多的东西,然后就不在使用了,因为都成了单利的,这样就保证了效率,不是每次都把我们要注入的全部new一次,而是tomcat启动的时候全部new一次以后就不new了,保证了效率问题。


所以我不明白那个 光看注解就知道性能不好?
注解就是替代了xml配置而已,而且也是初始化一次,也就是说和编写Servlet一样的在init()中做了很多的事而已,并且以后不会在运行init()了,除非你重启tomcat。

struts1也一样,运行一个action的方法的时候创建一个action类,以后再运行就不会创建了,其实也是Servlet的封装的框架。

struts2特殊一些,没个请求要new一个action来保证线程安全。所以效率会低一些,但是不会低的特别离谱。

这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的,struts2的确实是线程安全的。

#3


问的好。。学习一下。。

#4


线程安不安全  就看你有没有全局的变量   如果你没有类中定义的变量   那就都是安全的

#5


引用 2 楼 kky2010_110 的回复:
http://blog.csdn.net/generalyy0/article/details/7003974

注解和性能没有关系,Servlet的生命周期是这样的,在调用这个Servlet时候才创建这个Servlet的类并运行init()方法,然后另外有人运行这个Servlet的时候并没有重启创建Servlet和运行里边的init()方法,所以Servlet容器时单利的,spring就是Servlet的封装的框架,包括所有的依赖注入都是在tomcat启动的时候全部被初始化的,其他的注解也一样,也就是说注解也就是以前的xml的配置的替代,以前没个请求都要运行一次xml吗?并不是的,xml是在tomcat启动时就读一次而已并利用里边的配置初始化很多的东西,然后就不在使用了,因为都成了单利的,这样就保证了效率,不是每次都把我们要注入的全部new一次,而是tomcat启动的时候全部new一次以后就不new了,保证了效率问题。


所以我不明白那个 光看注解就知道性能不好?
注解就是替代了xml配置而已,而且也是初始化一次,也就是说和编写Servlet一样的在init()中做了很多的事而已,并且以后不会在运行init()了,除非你重启tomcat。

struts1也一样,运行一个action的方法的时候创建一个action类,以后再运行就不会创建了,其实也是Servlet的封装的框架。

struts2特殊一些,没个请求要new一个action来保证线程安全。所以效率会低一些,但是不会低的特别离谱。

这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的,struts2的确实是线程安全的。
受教了  根据你的总结 struts2是安全的 每个request是不同的action   struts1和springmvc是线程不安全的  

#6


好好学习一下 

#7


引用 5 楼 u014039623 的回复:
Quote: 引用 2 楼 kky2010_110 的回复:

这样也说明了spring3的mvc和struts1的mvc还有Servlet都是方法的线程安全,所以在类方法声明的私有或者公有变量不是线程安全的,struts2的确实是线程安全的。
受教了  根据你的总结 struts2是安全的 每个request是不同的action   struts1和springmvc是线程不安全的  

确实是这样的,最近在研究多线程问题,我看到一本好书推荐给你,叫做java多线程设计模式
http://www.cnblogs.com/gaotianle/archive/2013/09/07/3306971.html
这个博主把代码实现了一遍,我建议自己再实现一遍哪怕抄写一遍,会对多线程有更清晰的认识。
看java源码也可以比如面试当中较多的问题vector和arraylist的区别就有线程安全的知识,祝学习愉快。