一個(gè)網(wǎng)站,多個(gè)客戶端來(lái)訪問(wèn),這就是產(chǎn)生了多線程效果;
public class ThreadDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
int count =0;
public ThreadDemo() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//加上延遲來(lái)模擬出錯(cuò)情況
// try {
// Thread.sleep(500);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//加上同步鎖
synchronized (ThreadDemo.class) {
response.getWriter().write("你是第"+count+"個(gè)訪問(wèn)該站點(diǎn)");
count++;
}
}
}

Paste_Image.png
開(kāi)發(fā)線程安全的servlet建議:
- 盡量不要使用成員變量,或者靜態(tài)成員變量。
- 必須要使用成員變量,要么給使用了成員變量的代碼塊加同步鎖,加鎖的代碼塊的范圍盡量縮小,因?yàn)橛锌赡苡绊懗绦虿l(fā)效率。