繁体   English   中英

理解servlet和多线程

[英]Towards understanding servlets and multi-threading

因此,我读了这个很棒的线程: 每个servlet实例与servlet中每个servlet线程之间的区别?

它说:“ servlet容器为每个请求重用相同的servlet实例。”

假设我们有一个servlet:

public class MyServlet extends HttpServlet {



    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object thisIsThreadSafe;

        thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
    } 
}

Servlet容器也是如此,初始化时将在内部调用:

MyServlet myServlet = new MyServlet(....);

然后,当请求与web.xml中的内容匹配时,它将返回此实例myServlet。

我需要帮助的理解是,何时致电:

myServlet.doGet(..)

只有1个实例时,多线程如何工作? 这并不是真正针对servlet的,我只是无法理解它是如何工作的。

假设网站上有10个并发用户恰好同时点击了这个servlet,这个实例在所有用户中都是共享的,为什么它不然后以串行方式阻塞并工作,它是如何并行执行的呢?

这并非特定于Servlet。 这是特定于Java的。 Java语言和VM 支持通过多个线程调用单个方法。 每个线程将只拥有其自己的方法局部变量份额。 如果要限制此范围,则必须向该方法添加synchronized锁,或者让Servlet实现(不建议使用!) SingleThreadModel接口。 但这不是必需的,如果您以线程安全的方式编写servlet方法(即,不要将请求/会话范围的数据分配为实例变量)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM