@WebServlet(value = "/account", asyncSupported = true)
public class AccountServlet extends javax.servlet.http.HttpServlet {
int i = 0;
private final ScheduledExecutorService executor =
Executors.newSingleThreadScheduledExecutor();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
System.out.println("i="+(++i));
}
@Override
public void destroy() {
executor.shutdown();
}
}
我研究servlet的工作过程。当我在每个标签页和新浏览器中打开新标签时,我在新标签页甚至是新浏览器中增加了0 1 2等。
我认为我必须从新标签和新浏览器中的0开始。我们如何解释为什么会这样?
答案 0 :(得分:0)
在Web应用程序的整个生命周期中,只创建单个Servlet对象,并为每个后续请求创建一个新线程
Java servlet容器/ Web服务器通常是多线程的。那 表示可以执行对同一个servlet的多个请求 同时。
这就是为什么当下次请求到来时,它不会重新初始化成员i
,而是使用之前的i