java如何處理并發問題?
在web應用中,同一時間有大量的客戶端請求同時發送到服務器,例如搶購、秒殺等。這個時候如何避免將大量的請求同時發送到業務系統。
第一種方法:在容器中配置最大請求數,如果大于改請求數,則客戶端阻塞。該方法有效的阻止了大量的請求同時訪問業務系統,但對用于不友好。
第二種方法:使用過濾器,保證一定數量的請求能夠正常訪問系統,多余的請求先跳轉到排隊頁面,由排隊頁面定時發起請求。過濾器實現如下:
<pre name="code" class="java">
public class ServiceFilter implements Filter {
private static final int MAX_COUNT = 20;
private int filterCount = 0;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("before"+filterCount);
if(filterCount > MAX_COUNT) {
//請求個數太多,跳轉到排隊頁面 request.getRequestDispatcher("index.jsp").forward(request, response);
}
else {
//請求個數加1
filterCount ++; chain.doFilter(request, response);
//訪問結束,請求個數減1 filterCount --; } }
}
百度搜索圈T社區(www.aiquanti.com) 免費視頻教程