HttpServlet没有实现runnable或extend thread,为什么它可以线程化?

Oh *_*oon 4 java concurrency servlets

对于可运行的对象,它需要实现Runnable接口或扩展Thread类,但是,似乎HttpServlet没有任何这些.

怎么HttpServlet可以线程或我弄错了?

hom*_*ome 13

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

毫无疑问,实际上它会更复杂,更复杂:-)

BTW:这就是你的servlet类必须是线程安全的原因!