一个对象要成为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/