String s = "foobar";
atomic midir?String s = "foobar" atomik mi?
Bir nesne başvurusu atama olmalı, ancak emin değilim.
Teşekkürler.
String s = "foobar";
atomic midir?String s = "foobar" atomik mi?
Bir nesne başvurusu atama olmalı, ancak emin değilim.
Teşekkürler.
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
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;
Sadece bir operasyon görüyorum, iki operasyon nedir? –
@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
@rds atayın: Teşekkürler, bunu + derlemedim –
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
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
@Bombe, bunu kaçırdım, cevabı güncelledim –