Rozważmy następujący kod:Synchronizacja na "odniesienie" lub na przykład
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++;
}
}
}
to zadzwonić do metod dec()
i inc()
THREADSAFE? Z jednej strony metody te są zsynchronizowane w dwóch różnych instancjach _ lockRef1
i _ lockRef2
. Z drugiej strony, te przypadki „punkt” na tym samym obiekcie LOCK
...
Pytanie jest oznaczone jako "Java", więc myślę, że byłby to "java.lang.Object". – Yuval
@Yuval: Doh - nie zauważyłem tego. Dzięki, naprawiono :) –
Got it! Dzięki! Właściwie mam emun zamiast "prywatnego statycznego obiektu końcowego", ale wydaje się, że idea jest taka sama. – Lopotun