Czy atomowe jest String s = "foobar";
?Czy String s = "foobar" atomowy?
Przypisanie referencji do obiektu powinno być, ale nie jestem do końca pewien.
Dzięki.
Czy atomowe jest String s = "foobar";
?Czy String s = "foobar" atomowy?
Przypisanie referencji do obiektu powinno być, ale nie jestem do końca pewien.
Dzięki.
Tak. Wszystkie przypisania referencyjne są atomiczne w java.
Należy zauważyć, że złożona instrukcja, taka jak String s = new String("foobar")
, nie jest atomowa, ponieważ zawiera tworzenie obiektu, a następnie przypisanie osobno.
Należy również zauważyć, że „zadania do długich i podwójnych zmiennych nie mogą być atomowy”, z JLS-17.7
Tak, ale jeśli martwisz się o warunkach wyścigowych, powinien przynajmniej mieć świadomość metod „zsynchronizowanych”/Bloki.
i zauważ, że to nie jest atomowa, ponieważ zawiera dwie operacje:
String s = string_a + string_b;
Widzę tylko jedną operację, jakie są dwie operacje? –
@JanusTroelsen Operacje, które widzę są następujące: 1. 'StringBuilder' instanciation; 2. 'sb.append (string_a)'; 3. 'sb.append (string_b)'; 4. 'sb.toString()'; 5. przypisz do 's' – rds
@rds: Dzięki, nie wiedziałem + skompilowany do tego –
Należy również zauważyć, że zadania na '' double' long' i zmienne * nie * atomowej: patrz [JLS rozdział 17.7 ] (http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7), aby uzyskać więcej informacji. – Bombe
Aby podkreślić ostatnie zdanie: Jak rozumiem JLS, następujące zachowanie jest w porządku: 1. Przydziel przestrzeń dla "nowego ciągu". 2. przypisać niezainicjowany obiekt do s. 3. uruchom konstruktora. – Voo
@Bombe, dzięki, że przegapiłem to, zaktualizowałem odpowiedź –