在Java中
假设我有这样的代码
class A {
method A(){
synchronized(this)
{
this.B();
}
}
method B(){
//do modification stuff here
}
}
我的问题是,如果一个线程在方法 A 上工作,而另一个线程在方法 B 上工作,那么我的同步块(synchronized block)如何受到保护。??
最佳答案
如果我正确理解你的问题,你想同步访问这两种方法:
class A{
synchronized void A() {
B();
}
synchronized void B() {
}
}
这样,A()
和 B()
将使用相同的互斥体进行门控,并且如果一个线程尝试运行 B()
而另一个已经在运行 A()
,则必须等待。
在您给出的示例中,如果 B()
是私有(private)方法,并且所有线程都通过其 A()
方法访问该对象,那么您就不会'不会有问题,因为运行 B()
的线程已经通过进入 A()
中的 synchronized{}
block 来获取锁.
关于从 Synchronized block 调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284253/