这是什么java代码是什么意思?它将在MyClass的所有对象增益锁定?

synchronized(MyClass.class) {
   //is all objects of MyClass are thread-safe now ??
}

和如何上面的代码不同于这个之一:

synchronized(this) {
   //is all objects of MyClass are thread-safe now ??
}
有帮助吗?

解决方案

在片断synchronized(X.class)使用类实例作为监视器。由于只有一个类的实例(代表在运行时类的元数据的对象)一个线程可以是在该块中。

使用synchronized(this)块由实例把守。对于每一个实例只有一个线程可以进入块。

synchronized(X.class)用来确保有在块恰好一个线程。 synchronized(this)确保有每个实例只有一个线程。如果这使得实际的代码块中的线程安全依赖于实现。如果实例synchronized(this)的发生变异仅状态就足够了。

其他提示

要添加到其他的答案:

static void myMethod() {
  synchronized(MyClass.class) {
    //code
  }
}

等同于

static synchronized void myMethod() {
  //code
}

void myMethod() {
  synchronized(this) {
    //code
  }
}

等同于

synchronized void myMethod() {
  //code
}

没有,第一个将获得MyClass的类定义,而不是它的所有实例的锁。然而,如果在一个实例中使用,这将有效地阻止所有其它情况下,因为它们共享一个单一的类定义。

在第二将获得当前实例的锁定只。

至于这是否让你的对象是线程安全的,这是一个更为复杂的问题 - 我们需要看到你的代码

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top