我试图了解如果我将一个方法标记为同步会发生什么以及该方法内的调用会发生什么。我的 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 都会阻塞。在您的情况下,Service
和serviceBlock
与SyncClass
无关,所以不会,它不会阻塞。
关于java - 同步方法会锁定其中的所有方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502599/