Questo codice non è thread-safe. Il metodo di istanza si sincronizzerà su un'istanza, se si dispone di più istanze esse non utilizzeranno lo stesso monitor e quindi gli aggiornamenti possono essere intercalati.
È necessario rimuovere la statica dal campo value
o aggiungere statico al metodo increment()
.
Inoltre, come è stato reso pubblico value
, esiste il problema aggiuntivo che è possibile modificare o leggere il valore al di fuori di questo metodo senza utilizzare la sincronizzazione che potrebbe comportare la lettura di valori precedenti.
Quindi modificare il codice di seguito si renderà thread-safe:
public class IncreaseTest {
private int value = 0;
public synchronized int increment() {
return value++;
}
}
fonte
2013-03-02 12:58:38
È necessario specificare la lingua. – paxdiablo
Grazie per avermelo ricordato – codeisee