// private lock object idiom - thwarts denial-of-service attack
private final Object lock = new Object();
public void foo() {
synchronized (lock) {
...
}
}
优点:防止其他客户端超时的持有锁对象,从而避免客户端的拒绝服务攻击;
注意:
1、lock域被声明为final的,这样可以防止不小心改变它的内容,而破坏锁对象;
2、私有锁对象模式只能用在无条件的线程安全类(实例是可变的,但是这个类有足够的内部同步,无需任何外部同步)上,有条件的线程安全类(部分方法安全)不能应用这种模式。
3、私有锁对象模式特别适用于专门为继承而设计的类,不然的话子类和父类很可能相互锁住对方。
参见《Effective Java 第二版》第70条。