2011-09-14 26 views

cevap

18

Evet. Tüm referans atamaları java'da atomiktir.

Sadece String s = new String("foobar") gibi bir bileşik ifadenin atomik olmadığına dikkat edin, çünkü bir nesne oluşturmayı ve ardından ayrı bir ödevi içerir.

Ayrıca JLS-17.7

+3

o atamaları için 'long' ve' double' değişkenler * değil * atomiktir: bakınız [JLS bölüm 17.7 ] (Daha fazla bilgi için http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7). – Bombe

+0

Son cümlenizi vurgulamak için: JLS'yi anladığımdan, aşağıdaki davranış geçerlidir: 1. 'Yeni Dize' için yer ayırın. 2. başlatılmamış nesneyi s olarak atayın. 3. kurucu çalıştırın. – Voo

+0

@Bombe, bunu kaçırdım, cevabı güncelledim –

1

Evet den, "Uzun ve çift değişkenlere atamaları atomik olmayabilir" dikkat, ancak yarış koşullarında endişe ediyorsan, en azından 'senkronize' yöntemlerinin farkında olmalı/blokları.

Ve iki işlemleri içerdiği için bu atomik olmadığına dikkat: Ayrıca belirtmek gerekir

String s = string_a + string_b; 
+0

Sadece bir operasyon görüyorum, iki operasyon nedir? –

+0

@JanusTroelsen Gördüğüm işlemler şunlardır: 1. 'StringBuilder' instanciation; 2. 'sb.append (string_a)'; 3. 'sb.append (string_b)'; 4. 'sb.toString()'; 5. 's' – rds

+0

@rds atayın: Teşekkürler, bunu + derlemedim –

İlgili konular