Multithreading '的行为是什么;此.synchronized';在Scala中的方法中?
假设我有一个类,每个方法都与“this.synchronized”同步。这是否保证在某个时间点,只有一个线程在访问该类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是一回事,
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()
并行调用,这很好(不是因为它不安全或其他原因-我不认为这些方法的默认实现会导致竞争)