Skip to content
阅读进度

synchronized 可以用在哪里 实例锁和类锁怎么区分? ​

返回 Java 与并发 目录

标准回答 ​

synchronized 可以修饰实例方法、静态方法,也可以包围代码块。实例方法锁住当前 this,静态方法锁住对应 Class 对象,代码块锁住括号中指定的对象。只有竞争同一个监视器的代码才相互互斥,所以两个不同实例的 synchronized 方法通常不会互相挡住;实例锁和类锁也不是同一把锁。它同时提供临界区互斥和相应的内存可见性。我会明确共享数据归属,再选固定锁对象和较小的临界区。

延伸追问 ​

不要用不断变化的锁引用,也不要拿字符串常量等可能被外部共享的对象随意当锁。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。