在方法体上和在方法体里使用synchronized的区别

来源:互联网 发布:sql中like加数值型 编辑:程序博客网 时间:2024/05/07 11:03

学习synchronized时,我们可以把synchronized放在方法体上,也可以放在方法体内


拿servlet来说,如果放在方法体上,就会把后面的request阻塞掉:

protected synchronized void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println("Hello");synchronized (this) {try {Thread.sleep(Integer.MAX_VALUE);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}PrintWriter writer = response.getWriter();writer.write("get call");writer.flush();}


发多个请求都只能看到一个Hello




如果把synchronized放在方法体内则不会出现以上情况

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println("Hello");synchronized (this) {try {Thread.sleep(Integer.MAX_VALUE);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}PrintWriter writer = response.getWriter();writer.write("get call");writer.flush();}



0 0
原创粉丝点击