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

2024-03-18

对于一个可运行的对象,它需要实现Runnable接口或扩展Thread类,然而,似乎并没有HttpServlet做任何这些。

怎么会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 类必须是线程安全的原因!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpServlet没有实现runnable或extend thread,为什么它是thread-able的? 的相关文章

随机推荐