这个问题以前已经问过了,以前也讨论过,但我想进一步问。
servlets是否是单例的?据我所知,它们只是由容器初始化的,但它们仍然不是单例??为什么?
servlets是单线程还是多线程(忘记javax.servlet.singlethreadmodel类),即当一个servlet有多个请求时会发生什么??如果它们是当前执行的,那就意味着它是多线程的??如果它是多线程的,那么每个线程都有一个servlet示例,这与第一点相矛盾!!
我认为,每当有一个新的请求时,容器就会为传入的请求创建一个新的线程,比如req1,因为它调用或分派控制到servlet的服务方法。现在执行死刑的是伦蒂。。我想是的。。。
我的工作在mvc环境中是否也一样(比如支柱1/2,Spring)
4条答案
按热度按时间g9icjywg1#
只存在一个示例并不意味着它不是多线程的。多个线程可以同时调用同一示例的同一方法。servlet绝对是多线程的。
iyr7buue2#
也许,下面链接中给出的图表说明了一切。。。http://www.tutorialspoint.com/servlets/servlets-life-cycle.htm
wxclj1h53#
这取决于执行情况。servlet接口没有指定。http://docs.oracle.com/javaee/5/api/javax/servlet/servlet.html
但是,如果您看到httpservlet,那么您可以看到它指定它应该被同步。http://docs.oracle.com/javaee/5/api/javax/servlet/http/httpservlet.html
csbfibhn4#
servlet是多线程的,这是提高其效率的基础。可以使用“implements singlethreadmodel”使servlet成为单线程的,因此对于每个请求都将创建一个新对象。
最近这个接口singlethreadmodel被弃用了