当同步块用于对象实例上的同步时,线程竞争进入对象的隐式监视器.一旦任何特定线程进入监视器,任何其他线程都必须等待进入它.然后
synchronized(object){
// some code here
// no function call
}
Run Code Online (Sandbox Code Playgroud)
不得强制执行任何特定类型的对象.因此,这里可以使用任何对象类型,因为每个对象都有其隐式监视器.
请回复我是真的吗?
是的,每个Java对象都可以充当监视器.
由于这是一个如此简短的答案,为了奖励,这是一个有趣的读物:JVM是否为每个对象创建一个互斥锁以实现'synchronized'关键字?如果没有,怎么样?
另请注意,C#与其对象类似,但也有值类型(不是监视器)
请记住,如果你有一个变量null
,你就无法锁定它.此外,虽然喜欢的东西Integer
是对象,一个int
或者float
是没有.你可以锁定一个Integer
或者int[]
,但不能锁定int
.
归档时间: |
|
查看次数: |
4160 次 |
最近记录: |