gpt4 book ai didi

java - 了解 servlet 和多线程

转载 作者:行者123 更新时间:2023-12-03 21:28:35 27 4
gpt4 key购买 nike

所以我读了这个很棒的帖子:Difference between each instance of servlet and each thread of servlet in servlets?

它说“servletcontainer 为每个请求重用相同的 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 supports多个线程调用同一个方法。每个线程都有自己的方法局部变量。如果你想限制这个,你必须添加一个 synchronized 锁到方法或让 servlet 实现(已弃用!)SingleThreadModel界面。但如果您以线程安全的方式编写 servlet 方法(即不将请求/ session 范围的数据分配为实例变量),则没有必要这样做。

关于java - 了解 servlet 和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446989/

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