对象同步

use*_*690 8 java

当同步块用于对象实例上的同步时,线程竞争进入对象的隐式监视器.一旦任何特定线程进入监视器,任何其他线程都必须等待进入它.然后

synchronized(object){
  // some code here
  // no function call
}
Run Code Online (Sandbox Code Playgroud)

不得强制执行任何特定类型的对象.因此,这里可以使用任何对象类型,因为每个对象都有其隐式监视器.

请回复我是真的吗?

Dil*_*nga 9

是的,每个Java对象都可以充当监视器.

由于这是一个如此简短的答案,为了奖励,这是一个有趣的读物:JVM是否为每个对象创建一个互斥锁以实现'synchronized'关键字?如果没有,怎么样?

另请注意,C#与其对象类似,也有值类型(不是监视器)


Gab*_*abe 5

请记住,如果你有一个变量null,你就无法锁定它.此外,虽然喜欢的东西Integer是对象,一个int或者float没有.你可以锁定一个Integer或者int[],但不能锁定int.