如果在同步块中使用方法参数而不是this关键字,Java同步的行为如何。
public void doSomething(final MyInterface iface) {
synchronized(this) {
// ... do some work
}
}
与
public void doSomething(final MyInterface iface) {
synchronized(iface) {
// ... do some work
}
}
净效果会是一样的吗?
这两种情况完全不同。
使用synchronized
时,将在作为参数传递的对象上获得锁(监视器)。
synchronized(this)
-->线程获取对"当前"对象的锁定。
synchronized(iface)
-->线程获取对"iface"对象的锁定
净效果会是一样的吗?
不,效果可能会大不相同。
你读过JLS
吗?this
关键字上的同步意味着对象本身(在其上调用了方法)上的同步。很明显,this
对象和参数引用的对象在一般情况下是不一样的。