[英]About calling methods from a synchronized block
正在同步一个等价的方法,只让一个线程对它进行评估,直到它超出范围,包括内部方法调用?
例如:
public synchronized void foo(){
if(critical condition){
bar(); // can influence the above condition
}
baz(); // can influence the above condition
}
可以将两个线程放在bar
(假设它只能从这里调用)?
如果baz
可以从除foo
之外的代码中的另一个地方调用,那么可以使用两个线程吗?
可以将两个线程放在bar中(假设它只能从这里调用)?
是的,只要他们使用不同的对象,或者一个是wait()
ing。
如果baz可以从除foo之外的代码中的另一个地方调用,那么可以使用两个线程吗?
是的,在一个方法上放置synchronized
会对未同步的方法没有影响。
这是编写代码的等效方法:
public void foo(){
synchronized (this) {
if(critical condition){
bar(); // can influence the above condition
}
baz(); // can influence the above condition
}
}
因为synchronized方法实际上使用this
作为锁定对象来同步它们的实体。
那么,两个线程可以同时执行foo()
还是同时执行bar()
? 当然,如果他们正在执行不同对象的foo()
或bar()
。
此外,对baz()
的调用根本不同步,因此即使任何两个线程也可以同时运行单个对象的baz()
,只要其中至少有一个从foo()
外部调用它。
这两个资源有助于理解Java中的同步和不执行的操作:
我建议您检查这些页面,因为有些信息在您检查之前不太明显。 例如:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.