Questo article parla della parola chiave "sincronizzata" di Java.Thread Java "sincronizzati"
...
private int foo;
public synchronized int getFoo() { return foo; }
public synchronized void setFoo(int f) { foo = f; }
Se un chiamante vuole incrementare la proprietà foo, il seguente codice per farlo non è thread-safe:
...
setFoo(getFoo() + 1);
Se due thread tentano di incrementare foo, allo stesso tempo, il il risultato potrebbe essere che il valore di foo viene aumentato di uno o due, a seconda del tempo.
Ora, la mia domanda:
Perché non "sincronizzato", a setFoo() impedire che quanto sopra in grassetto linea?
'Quindi ognuno di essi aggiunge uno e chiama setFoo, e il risultato finale è che foo viene incrementato solo una volta, invece di due volte' Perché? –
Poiché ogni thread aggiorna 'foo' sullo stesso valore. Ad esempio, ognuno di essi ottiene il valore 2, ognuno di essi aggiunge 1 per ottenere 3, quindi ognuno di essi imposta il valore su 3. – rgettman
Se ho capito bene, la frase non dovrebbe essere "Quindi ognuno di essi aggiunge uno" e chiama setFoo, e il risultato finale è che foo viene incrementato ** due volte **? ' –