为什么锁定对象而不是java中的代码

时间:2016-02-28 07:22:30

标签: java multithreading

我们在Java中使用以下语法。

public synchronized void count() {
    count--;
}

可以像下面这样进行修改。

public void count() {
    synchronized(this) {
        count--;
    }
}

我的问题是,为什么我们不能在Java中编写如下代码?

public void count() {
    synchronized {
        count --;  
    }
}    

事实上,我想了解b / w synchronized(this)synchronized(other)

的区别

1 个答案:

答案 0 :(得分:2)

你不能像下面提到的代码那样编写代码。

同步块始终用于锁定任何共享资源的对象。 同步块的范围小于方法。这就是synchronized块和方法之间的区别。

class Table{  

 void printTable(int n){  
   synchronized(this){//synchronized block  
     for(int i=1;i<=5;i++){  
      System.out.println(n*i);  
      try{  
       Thread.sleep(400);  
      }catch(Exception e){System.out.println(e);}  
     }  
   }  
 }//end of the method  
} 

上面是同步块的示例,它阻止其他线程在同一对象上进行同步。