有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java单例Servlet实例

Tomcat将servlet作为一个单例对象,然后将这个单例对象引用作为局部变量设置为连接线程。之后,每个线程也会同步地播放这个局部变量。对吗

我很困惑,因为servlet是一个单例,所以只有一个实例。但该规范称,“不要将service()方法标记为syncronized,因为当时servlet容器不能使用实例池方法

泳池和单身,细节上非常混乱。容器是否使用“volatile”关键字使其池中的共享本地变量保持相等


共 (1) 个答案

  1. # 1 楼答案

    servlet是一个单例。这意味着对该servlet的每个请求都会调用该唯一对象的service()方法

    因此,使service()方法同步将可以很好地工作,除非没有两个请求能够同时执行service()方法:这就是synchronized所做的

    因此,现在不是每个用户有10个并发执行该方法,而是有1个用户执行该方法,另外9个用户等待该方法返回,然后下一个用户在其他8个用户等待时执行该方法,等等。因此,如果有并发请求,这将使servlet非常慢,并且将不充分使用您的web服务器的资源

    因此,简而言之,servlet必须是线程安全的:它必须以安全的方式允许并发方法执行