Si consideri il seguente codice:Sincronizzazione su "di riferimento" o su istanza
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++;
}
}
}
È chiamata a metodi dec()
e inc()
threadsafe? Da un lato questi metodi sono sincronizzati su due diverse istanze _ lockRef1
e _ lockRef2
. D'altra parte, queste istanze "punto" sullo stesso oggetto LOCK
...
La domanda è contrassegnata come "Java", quindi penso che questo sarebbe 'java.lang.Object'. – Yuval
@Yuval: Doh - non lo ha notato. Grazie, risolto :) –
Grazie! In realtà, ho un emun invece di "oggetto statico finale privato", ma sembra che l'idea sia la stessa. – Lopotun