this
和Example.this
是同一个对象吗?
E.g。 this
内的Example.class
和synchronized
来电是同一个对象吗?
class Example {
public Example() {
synchronized(this) {
// some code
}
}
}
class Example {
public Example() {
synchronized(Example.class) {
// some code
}
}
}
答案 0 :(得分:3)
不,this
使用当前对象作为监视器,但Example.class
使用Example.class
作为监视器。
答案 1 :(得分:1)
不,this
是Example
的实例,而Example.class
是Class
的实例。
答案 2 :(得分:1)
没有
this
上的同步是实例级锁定,这意味着无法使用同一对象重新输入关键部分。
Example.class
上的同步是类级别锁定,这意味着该类的其他任何实例(包括this
)都无法进入该关键部分。
正如您所看到的, class-level 锁定在某种意义上更加激烈。
答案 3 :(得分:0)
这将同步对锁定类的访问,而不是对此/当前对象的访问。使用您认为更容易和更有效的任何一种。