Considerate seguente codice, voglio renderla una classe thread-safe, in modo che non potrà mai ottenere il numero dispari:posso utilizzare sincronizzato su un campo finale?
class Test {
private int value = 0;
private final Object lock;
public void add() {
synchronized (lock) {
value++;
value++;
}
}
public int getValue() {
synchronized (lock) {
return value;
}
}
}
Ora sono dubbi del campo di blocco, che viene dichiarata definitiva, sarà questo importa? o romperà la sicurezza del filo?
Penso che se il campo di blocco non è dichiarato definitivo, questa dovrebbe essere una classe thread-safe. Se questa conclusione è sbagliata, per favore correggimi, grazie.
Vedere [questo] (http://stackoverflow.com/questions/2101327/final-variable-and-synchronized-block-in-java) domanda. – Lion