【发布时间】:2013-10-25 12:41:28
【问题描述】:
java多线程中“private final Object”锁定有什么用?
就我的理解而言,我认为要使一个类成为线程安全的,我们应该使用内在锁定,我们将所有方法标记为同步并使用“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
// ...
}
}
}
是否建议使用上述外部锁定而不是使用内部锁定使类成为线程安全的?如果我的理解有误,请纠正我?
【问题讨论】:
-
这只是使对类的访问同步 - 这与线程安全不同。 (除非每个公共方法都实现一个逻辑“事务”。)
标签: java multithreading