Lop*_*tun 19 java synchronization
请考虑以下代码:
public class Foo {
private static final Object LOCK = new Object();
private Object _lockRef1 = LOCK;
private Object _lockRef2 = LOCK;
private int _indx = 0;
public void dec() {
synchronized(_lockRef1) {
_indx--;
}
}
public void inc() {
synchronized(_lockRef2) {
_indx++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
是调用方法dec()和inc()线程安全吗?一方面,这些方法在两个不同的实例_ lockRef1和_ 上同步lockRef2.另一方面,这些实例"指向"同一个对象LOCK......
Jon*_*eet 19
它们不是"在两个不同的实例上同步" - 仅仅因为你使用两个不同的变量并不意味着有两个不同的实例.你有几个变量,每个变量都有相同的值 - 对单个实例的引用java.lang.Object.
所以是的,这是线程安全的.当然,你不应该在可读性方面编写这样的代码,但假设你只是想了解发生了什么,那很好.