1. 程式人生 > >多線程安全的解決方法

多線程安全的解決方法

ktr trace int iter sleep resp request catch thread

11 public class ServletDemo3 extends HttpServlet {
12 
13     int i=1;
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16         /**
17          * 加了synchronized後,並發訪問i時就不存在線程安全問題了,
18          * 為什麽加了synchronized後就沒有線程安全問題了呢?
19          * 假如現在有一個線程訪問Servlet對象,那麽它就先拿到了Servlet對象的那把鎖
20          * 等到它執行完之後才會把鎖還給Servlet對象,由於是它先拿到了Servlet對象的那把鎖,
21          * 所以當有別的線程來訪問這個Servlet對象時,由於鎖已經被之前的線程拿走了,後面的線程只能排隊等候了
22          * 
23          
*/ 24 synchronized (this) {//在java中,每一個對象都有一把鎖,這裏的this指的就是Servlet對象 25 i++; 26 try { 27 Thread.sleep(1000*4); 28 } catch (InterruptedException e) { 29 e.printStackTrace(); 30 } 31 response.getWriter().write(i+"");
32 } 33 34 } 35 36 public void doPost(HttpServletRequest request, HttpServletResponse response) 37 throws ServletException, IOException { 38 doGet(request, response); 39 } 40 41 }

多線程安全的解決方法