2012-10-29 30 views
8

Ben Yani eğerStatik bir son char [] parçacığı güvenli midir?

private static final char[] SOME_CHARS; 

o parçacığı güvenli mi? Demek istediğim, bu dizideki karakterlere (ama onları değiştirmeme) işaret eden birden fazla iş parçacığım varsa, herhangi bir yanlışlık olacak mı?

örn.

private class someThread extends Thread(){ 


    public void run(){ 
    for(int i = 0; i < someIndexInSomeChars;i++){ 
     System.out.println(SOME_CHARS[i]); 
    } 
} 

Başka bir deyişle, char [] 'ı iplik desteği ile bir tür Java koleksiyonuna koymak zorunda mıyım?

+1

Sorun yok. Ancak, 'String', güvenilen bir değişmez veri tipidir, dolayısıyla daha güvenlidir. Bir char değiştirmek bile iyi olur. –

+0

Başlığı "Char []' yerine "char []" koduna kapalı olarak ayarladım. Sanırım gerçekten kastettiğin şey bu mu? –

+0

evet- bir yazım hatası oldu - ben de başlığa son ekleyeceğim ben de – praks5432

cevap

10

Başlatmadan sonra bunları değiştirmezseniz, iyi olmalıdır. (Bunun static final değişkenine bağlı olduğunu unutmayın - sınıfların başlatılma biçimi, tüm iş parçacıklarının başlatılan dizi referansını doğru şekilde görmesini sağlayacaktır.)

Diziler, birden çok ileti dizisinden okunabilir. Eski sonuçları görmeyi umursamaysanız bile birden fazla ileti dizisinden yazabilirsiniz - koleksiyonun kendisini "bozan" olmaz. (Diğer pek çok koleksiyonun aksine, bir dizinin boyutunu değiştiremezsiniz ... öğelerin kendilerinden başka bir değişiklik yapma durumu yoktur.)

+0

hmm char'i alıp bir String'e koyarsam ne olur? So String = "someStuff" + SOME_CHARS [i] "; ve sonra String'i bir noktada döndürürüm: Bu problemi görmezden gelmem çünkü yeni String'in eski char'a yapılan bir referansa göre yeni bir char olması gerekir. - Bu durum mu? – praks5432

+0

@ praks5432: Bu iyi, "yeni char" ve "eski char" ile ne demek istediğin açık değil ... "char" un zaten bir ilkel tip olduğunu unutma ... –

+0

hmm, sanırım bu soruyu soruyorum - eğer aynı dizideki farklı dizileri o dizide alsam, dizinin değişmeyeceğinden emin olabilir miyim? – praks5432

İlgili konular