java - 同步方法会锁定其中的所有方法吗?

标签 java multithreading

我试图了解如果我将一个方法标记为同步会发生什么以及该方法内的调用会发生什么。我的 SyncClass 是从外部 Web 服务调用的。这些 Web 服务调用可以发生任意多次。 示例:

//Webservice talks to this class.
class SyncClass {
    public synchronized void syncMethod() {
        Service service = new Service();
        service.serviceBlock();
      }
}

class Service{

   public void serviceBlock(){
    doManyThings(){
    // validation
    // service logic
    SaveService save = new SaveService();
    save.saveMe();
   }
}

}

class SaveService {

 public void saveMe(){
  //many operations
  public methodA();
  public methodB();
  public methodC();
}
}

如果有来 self 的应用程序内部的调用直接调用 methodA()、methodB()、methodC() 等,会发生什么情况。这些方法可以从其他地方调用。如果syncMethod从webservice获取了锁,它是否也会锁定这3个方法?

最佳答案

更准确地说,syncMethod 将锁定(SyncClass)的实例。如果应用于同一个实例,任何同步方法或 block 都会阻塞。在您的情况下,ServiceserviceBlockSyncClass无关,所以不会,它不会阻塞。

关于java - 同步方法会锁定其中的所有方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502599/

相关文章:

java - 将 Spring Batch 分区配置为处理器和写入器,同时从分区中排除读取器

python - 在python中停止定时线程

java - 当尺寸未知时有效加载位图

java - 在 Lucene 中结合模糊查询和 SpanNear 查询

java - Java 电梯模拟器中的通知

python - 终止剩余的线程

java - 如何对暂停执行的代码进行单元测试而不将其抽象出来?

java - Struts 不从参数列表中排除提交操作

java - 泛型类型 : not applicable for the arguments

java - 如果元素未存储在数组中,如何从下拉列表中单击选项