È String s = "foobar";
atomico?Is String s = "foobar" atomico?
L'assegnazione di un riferimento all'oggetto dovrebbe essere, ma non ne sono proprio sicuro.
Grazie.
È String s = "foobar";
atomico?Is String s = "foobar" atomico?
L'assegnazione di un riferimento all'oggetto dovrebbe essere, ma non ne sono proprio sicuro.
Grazie.
Sì. Tutti i compiti di riferimento sono atomici in java.
Basta notare che una dichiarazione composita come String s = new String("foobar")
non è atomica, poiché comprende una creazione dell'oggetto e quindi un'assegnazione separata.
Si noti inoltre che "le assegnazioni alle variabili lunghe e doppie possono non essere atomica", da JLS-17.7
Sì, ma se siete preoccupati per le condizioni di gara, si dovrebbe almeno essere a conoscenza di metodi 'sincronizzati'/blocchi.
E si noti che questo non è atomica perché contiene due operazioni:
String s = string_a + string_b;
vedo solo un'operazione, quali sono le due operazioni? –
@JanusTroelsen Le operazioni che vedo sono: 1. instanciation 'StringBuilder'; 2. 'sb.append (string_a)'; 3. 'sb.append (string_b)'; 4. 'sb.toString()'; 5. assegnare a 's' – rds
@rds: Grazie, non sapevo + compilato per quello –
Va inoltre notato che le assegnazioni a '' double' long' e variabili sono * non * atomico: si veda [capitolo JLS 17,7 ] (http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7) per ulteriori informazioni. – Bombe
Per enfatizzare l'ultima frase: come ho capito JLS, il seguente comportamento va bene: 1. Assegna spazio per "nuova stringa". 2. assegnare un oggetto non inizializzato a s. 3. eseguire il costruttore. – Voo
@Bombe, grazie l'ho perso, ho aggiornato la risposta –