簡體   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