有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程为什么在对象上而不是java中的代码上创建锁

我们有以下Java语法

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

这可以像下面这样修改

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

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

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

事实上,我想理解b/wsynchronized(this)synchronized(other)之间的区别


共 (1) 个答案

  1. # 1 楼答案

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

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

    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  
    } 
    

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