多線程安全的解決方法
阿新 • • 發佈:2019-02-21
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 }
多線程安全的解決方法