【发布时间】:2012-01-16 20:00:52
【问题描述】:
所以我读到了这个很棒的帖子: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,这个实例在所有用户之间共享,为什么它不阻塞并以串行方式工作,它是如何做到的同时?
【问题讨论】:
-
也许@BalusC 不能在这里插话,因为他写得很好,我只是在这一点上磕磕绊绊。
-
另一个相关的答案是:stackoverflow.com/questions/3106452/…
标签: java multithreading servlets