java多线程中“私有最终对象”锁定的用途是什么?
就我的理解而言,我认为要使一个类成为线程安全的,我们应该使用内在锁定,我们将所有方法标记为同步并使用“this”将它们锁定在对象的监视器上?或者我们可以用方法中的私有最终对象锁替换在类的“this”上标记为同步的方法,以锁定通用对象锁以使其线程安全?
仅举例使用内部锁定的代码:
public class Counter{
// Locks on the object's monitor
public synchronized void changeValue() {
// ...
}
}
我们可以用下面的外部锁替换上面的代码:
public class Counter{
private final Object lock = new Object(); // private final lock object
public void changeValue() {
synchronized (lock) { // Locks on the private Object
// ...
}
}
}
是否建议使用上述外部锁定而不是使用内部锁定使类成为线程安全的?如果我的理解有误,请纠正我?