SpringMVC是单例的,高并发情况下,如何保证性能的?

未分类 一条评论
转自http://blog.csdn.net/config441002/article/details/52084156

首先在大家的思考中,肯定有影响的,你想想,单例顾名思义:一个个排队过…  高访问量的时候,你能想象服务器的压力了… 而且用户体验也不怎么好,等待太久~

实质上这种理解是错误的,Java里有个API叫做ThreadLocal,spring单例模式下用它来切换不同线程之间的参数。用ThreadLocal是为了保证线程安全,实际上ThreadLoacal的key就是当前线程的Thread实例。单例模式下,spring把每个线程可能存在线程安全问题的参数值放进了ThreadLocal。这样虽然是一个实例在操作,但是不同线程下的数据互相之间都是隔离的,因为运行时创建和销毁的bean大大减少了,所以大多数场景下这种方式对内存资源的消耗较少,而且并发越高优势越明显。

总的来说就是,单利模式因为大大节省了实例的创建和销毁,有利于提高性能,而ThreadLocal用来保证线程安全性。

另外补充说一句,单例模式是spring推荐的配置,它在高并发下能极大的节省资源,提高服务抗压能力。spring IOC的bean管理器是“绝对的线程安全”。

web项目本身支持多进程

每个请求都是单独的线程,即时同时访问同一个Controller对象,因为并没有修改Controller对象,相当于针对Controller对象而言,只是读操作,没有写操作,不需要做同步处理。

1条评论

m
malaganguo says: 回复

是单实例的,但是却是多线程的,其中threadlocal起到参数隔离的作用达到线程安全。

发表回复

您的电子邮箱地址不会被公开。

昵称 *