Java 的内置锁称为监视器锁或监视器。
遵循 Java 监视器模式的对象会把对象的所有可变状态都封装起来,并由对象自己的内置锁来保护。
Java 监视器模式仅仅是一种编写代码的约定,对于任何一种锁对象,只要自始至终都使用该锁对象,都可以用来保护对象的状态。
使用私有锁来保护状态
public class PrivateLocak {
private final Object myLock = new Object();
Widget widget;
void someMethod() {
synchronized (myLock) {
// 访问或修改 Widget 的状态
}
}
}
使用私有的锁对象而不是对象的内置锁 (或其它可通过公有方式访问的锁),有许多的优点。
私有的锁对象可以将锁封装起来,使客户代码无法得到锁,但客户代码可以通过公有方式访问锁,以便 (正确或不正确地) 参与到它的同步策略中。