java - HttpServlet 没有实现runnable 或extend thread,为什么它是thread-able?

标签 java servlets concurrency

一个对象要成为runnable,需要实现Runnable接口(interface)或者扩展Thread类,但是,HttpServlet好像没有code> 做这些中的任何一个。

为什么 HttpServlet 可以线程化还是我弄错了?

最佳答案

Servlet 本身不是线程。容器维护一个 servlet 类的实例,每个请求(线程)调用同一个 servlet 对象。所以 servlet 实例是跨线程共享的。在伪代码中它可能看起来像这样:

class ServerThread extends Thread {

    private javax.servlet.Servlet servlet;
    private javax.servlet.ServletRequest req;
    private javax.servlet.ServletResponse res;

    public ServerThread(javax.servlet.Servlet servlet, /* request and response */) {
        this.servlet = servlet;
        this.req = req;
        this.res = res;
    }

    @Override
    public void run() {
        this.servlet.service(req, resp);
    }

}

毫无疑问,在现实中它会复杂得多:-)

顺便说一句:这就是您的 servlet 类必须是线程安全的原因!

关于java - HttpServlet 没有实现runnable 或extend thread,为什么它是thread-able?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888268/

相关文章:

java - Intellij 偶尔无法为对象堆保留足够的空间

java - 我们如何知道在 BDD 方法中运行 Selenium Java 需要哪些 Cucumber jar 文件?

Java 代理使用图像资源

swift - 你必须手动指定你的DispatchQueue是串行的吗?

c++ - 使用并行模式库 (ppl.h)

java - eclipse 中的资源泄漏警告

eclipse - java.lang.IllegalArgumentException : The servlets named [X] and [Y] are both mapped to the url-pattern [/url] which is not permitted 异常

java - 我们是否需要在服务器端添加规定,以便浏览器中的文件下载可以提供暂停和恢复的便利?

java - 如何查找jsp中发生错误的地方

multithreading - 所有go routines are sleeve deadlock