java servlet 多线程_既然Java Servlet单实例多线程模式,为什么有多个Servlet的说法?...

泻药

你想得很好

先回答你的问题,就是多个servlet是根据业务划分的

比如结账买单是一个servlet处理,客户预约是另外一个servlet处理

但是servlet container/e.g. tomcat, resin, undertow都是通过多个线程并发访问这些servlet对象

这就引出一个问题,就是并发问题

其实在ejb里面,有一个保证,就是任何时候,都只会有一个线程在访问该对象

用这种方式保证object内部整体线程安全,这样你在写代码的时候

就可以肆无忌惮地把数据存在对象里面,而不用担心有并发问题

但是servlet这个组件并不是这么定义的,所以你不能把状态存到组件对象中去

会有并发问题,所以你要写出pure function,把doget dopost做成pure function

不能有副作用哈哈,spring也是这么搞的,spring的所有component缺省都是singleton

所以这就是一个麻烦的问题,而这个问题在akka,ejb,vert.x,乃至node里面,都不存在

换句话说,他们都实现了一个单线程的运行环境,可以把状态积存到对象属性中去

就spring相关的component就有这个问题

所以单实例多线程模式就是一个错误的,已经开始凸显其过时的模式

当然在早期,那种内存数量有限,对象都要数着用的年代,这个还有点意义

但是在今天,动不动上g的内存的前提下,我们需要节省这一点对象吗?

我们用vert.x爆1w/s的请求,1c1g的烂机器都不去节省这点内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值