Рассмотрим следующий код:
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++;
}
}
}
Вызов методов dec()
и inc()
threadsafe? С одной стороны, эти методы синхронизируются в двух разных экземплярах _ lockRef1
и _ lockRef2
. С другой стороны, эти экземпляры "указывают" на один и тот же объект LOCK
...