java单例Servlet实例
Tomcat将servlet作为一个单例对象,然后将这个单例对象引用作为局部变量设置为连接线程。之后,每个线程也会同步地播放这个局部变量。对吗
我很困惑,因为servlet是一个单例,所以只有一个实例。但该规范称,“不要将service()方法标记为syncronized,因为当时servlet容器不能使用实例池方法
泳池和单身,细节上非常混乱。容器是否使用“volatile”关键字使其池中的共享本地变量保持相等
你可以在下面搜索框中键入要查询的问题!
Tomcat将servlet作为一个单例对象,然后将这个单例对象引用作为局部变量设置为连接线程。之后,每个线程也会同步地播放这个局部变量。对吗
我很困惑,因为servlet是一个单例,所以只有一个实例。但该规范称,“不要将service()方法标记为syncronized,因为当时servlet容器不能使用实例池方法
泳池和单身,细节上非常混乱。容器是否使用“volatile”关键字使其池中的共享本地变量保持相等
# 1 楼答案
servlet是一个单例。这意味着对该servlet的每个请求都会调用该唯一对象的
service()
方法因此,使
service()
方法同步将可以很好地工作,除非没有两个请求能够同时执行service()
方法:这就是synchronized所做的因此,现在不是每个用户有10个并发执行该方法,而是有1个用户执行该方法,另外9个用户等待该方法返回,然后下一个用户在其他8个用户等待时执行该方法,等等。因此,如果有并发请求,这将使servlet非常慢,并且将不充分使用您的web服务器的资源
因此,简而言之,servlet必须是线程安全的:它必须以安全的方式允许并发方法执行