gpt4 book ai didi

servlets - 单例与单线程

转载 作者:行者123 更新时间:2023-12-02 17:54:18 25 4
gpt4 key购买 nike

通常 Servlet 仅启动一次,并且 Web 容器简单地为每个用户请求生成一个新线程。假设我从头开始创建自己的 Web 容器,而不是线程,我只需将 Servlet 创建为 Singleton。我会在这里遗漏什么吗?我想,在这种情况下,单例一次只能服务一个用户请求,而不是多个。

最佳答案

Normally Servlets are initiated just once and web container simple spawns a new thread for every user request.

第一个陈述是正确的,但第二个陈述实际上不是。通常,线程在应用程序启动期间创建一次并保存在线程池中。当线程完成其请求-响应处理工作后,它将返回到池中。这也是为什么在 servlet 容器中使用 ThreadLocal 时必须高度小心的原因。

Let's say if I create my own web container from scratch and instead of Threads, I simply create Servlets as Singleton. Will I be missing anything here?

它们不一定需要遵循单例模式。只需在应用程序启动期间仅创建它们的一个实例,并在应用程序的整个生命周期中将它们保留在内存中,并让所有线程访问同一实例。

I guess, in this case, the singleton can only service one user request at a time and not multiple.

这不是真的。仅当您在应用程序范围的锁上同步对单例方法的访问时才会发生这种情况。例如,通过将 synchronized 修饰符添加到 servlet 的方法中,或者将 synchronized(this) 添加到将请求委托(delegate)给 servlet 的管理器方法中。

关于servlets - 单例与单线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com