Multithreading '的行为是什么;此.synchronized';在Scala中的方法中?

Multithreading '的行为是什么;此.synchronized';在Scala中的方法中?,multithreading,scala,concurrency,Multithreading,Scala,Concurrency,假设我有一个类,每个方法都与“this.synchronized”同步。这是否保证在某个时间点,只有一个线程在访问该类 class MyClass { def x() = this.synchronized { } def y() = this.synchronized { } } 这似乎是一个愚蠢的问题,但我想知道“This.synchronized”和“synchronized”之间是否有区别。This.synchronized和synchronized是一回事,

假设我有一个类,每个方法都与“this.synchronized”同步。这是否保证在某个时间点,只有一个线程在访问该类

class MyClass {

  def x() = this.synchronized {

  }

  def y() = this.synchronized {

  }

}

这似乎是一个愚蠢的问题,但我想知道“This.synchronized”和“synchronized”之间是否有区别。

This.synchronized
synchronized
是一回事,正是因为对于任何其他方法而言
This.method
method
(除非作用域中存在另一个
方法,这对于
同步的
是不可能的)

Scala中的
synchronized
方法相当于Java中的
synchronized
块,也就是说,
obj.synchronized{…}
与Java中的
synchronized(obj){…}
相同(因此
this.synchronized
相当于
synchronized(this)


对于您的特定示例,可以保证没有两个线程可以同时调用
x()
y()
(或者只调用
x()
,或者只调用
y()
)。但是这不适用于从
对象继承的未同步的其他方法,例如,
hashCode()
等于()
。它们可以与
x()
y()
并行调用(这不是不安全或其他原因,我不认为这些方法的默认实现会导致竞争)

Scala中的
synchronized
方法相当于Java中的
synchronized
块,也就是说,
obj.synchronized{…}
与Java中的
synchronized(obj){…}
相同(因此
this.synchronized
相当于
synchronized(this)

对于您的特定示例,可以保证没有两个线程可以同时调用
x()
y()
(或者只调用
x()
,或者只调用
y()
)。但是这不适用于从
对象继承的未同步的其他方法,例如,
hashCode()
等于()
。它们可以与
x()
y()
并行调用,这很好(不是因为它不安全或其他原因-我不认为这些方法的默认实现会导致竞争)