4.1、異步servlet

同步:接收到一個請求后,tomcat 容器提供一個線程,線程調(diào)用servlet。
異步:請求異步處理后tomcat servlet線程立刻返回,自已啟動的線程執(zhí)行,這樣tomcat可以有較大的吞吐量。對前臺來說還是同步。

@WebServlet(asyncSupported = true, urlPatterns = { "/AsyncServlet" })
public class AsyncServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public AsyncServlet() {
        super();
    }
    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        long t1 = System.currentTimeMillis();
        // 開啟異步
        AsyncContext asyncContext = request.startAsync();
        // 執(zhí)行業(yè)務代碼
        CompletableFuture.runAsync(() -> doSomeThing(asyncContext,
                asyncContext.getRequest(), asyncContext.getResponse()));
        System.out.println("async use:" + (System.currentTimeMillis() - t1));
    }

    private void doSomeThing(AsyncContext asyncContext, ServletRequest servletRequest, ServletResponse servletResponse) {
            // 模擬耗時操作
            TimeUnit.SECONDS.sleep(5);
            servletResponse.getWriter().append("done");

            // 業(yè)務代碼處理完畢, 通知結(jié)束
            asyncContext.complete();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

代碼:
git@github.com:lesline/servlet.git

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容