假设我有一个类,并且每个方法都与'this.synchronized'同步。这是否可以保证在某个时间点只有一个线程正在访问该类?
class MyClass {
def x() = this.synchronized {
}
def y() = this.synchronized {
}
}
这看起来像是一个愚蠢的问题,但我想知道'this.synchronized'和'synchronized'之间是否有区别。
答案 0 :(得分:1)
this.synchronized
和synchronized
是相同的,因为对于任何其他方法this.method
与method
相同(除非另有method
个范围,synchronized
)不太可能。
Scala中的synchronized
方法等同于Java中的synchronized
块,即obj.synchronized { ... }
与Java中的synchronized(obj) { ... }
相同(因此{{1} }}相当于this.synchronized
)。
对于您的具体示例,保证没有两个线程可以同时调用synchronized(this)
和x()
(或仅y()
或仅x()
)。但这不适用于从y()
类继承的其他未同步的方法,例如Object
或hashCode()
。它们可以与equals()
和x()
并行调用(不是说它不安全或者其他东西 - 我不认为这些方法的默认实现会导致竞争)。