Scala中方法中'this.synchronized'的行为是什么?

时间:2018-01-16 22:20:20

标签: multithreading scala concurrency

假设我有一个类,并且每个方法都与'this.synchronized'同步。这是否可以保证在某个时间点只有一个线程正在访问该类?

class MyClass {

  def x() = this.synchronized {

  }

  def y() = this.synchronized {

  }

}

这看起来像是一个愚蠢的问题,但我想知道'this.synchronized'和'synchronized'之间是否有区别。

1 个答案:

答案 0 :(得分:1)

this.synchronizedsynchronized是相同的,因为对于任何其他方法this.methodmethod相同(除非另有method个范围,synchronized)不太可能。

Scala中的synchronized方法等同于Java中的synchronized块,即obj.synchronized { ... }与Java中的synchronized(obj) { ... }相同(因此{{1} }}相当于this.synchronized)。

对于您的具体示例,保证没有两个线程可以同时调用synchronized(this)x()(或仅y()或仅x())。但这不适用于从y()类继承的其他未同步的方法,例如ObjecthashCode()。它们可以与equals()x()并行调用(不是说它不安全或者其他东西 - 我不认为这些方法的默认实现会导致竞争)。

相关问题