-2

如果在同步块中使用方法参数而不是this关键字,Java 同步的行为方式。

public void doSomething(final MyInterface iface) {
  synchronized(this) {
    // ... do some work
  }
}

对比

public void doSomething(final MyInterface iface) {
  synchronized(iface) {
    // ... do some work
  }
}

净效果会一样吗?

4

2 回答 2

2

这两种情况完全不同。

使用 时synchronized,会在作为参数传递的对象上获得锁(监视器)。

synchronized(this)--> 线程获得“当前”对象的锁定。

synchronized(iface)--> 线程获得“iface”对象的锁定

净效果会一样吗?

不,效果可能完全不同。

于 2015-03-04T09:46:32.903 回答
1

你读过JLS吗?关键字的同步this意味着对象本身的同步(调用了哪个方法)。很明显,this对象和参数引用的对象通常不是同一个东西。

于 2015-03-04T09:47:34.833 回答