2012-10-29 13 views
8

私が持っているので、場合static final char []スレッドは安全ですか?

private static final char[] SOME_CHARS; 

は、そのスレッドは安全ですか?つまり、配列内の文字を参照する複数のスレッドがある場合(それらを変更していない場合)、何かが間違っていますか?

private class someThread extends Thread(){ 


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

つまり、スレッドサポートを備えたJavaコレクションにchar []を配置する必要がありますか?

+1

問題はありません。しかし、文字列は不変なデータ型であるため安全です。チャーを変えても大丈夫です。 –

+0

タイトルを 'Char []'ではなく 'char []'というコードに変更しました。私はそれがあなたが本当に意味していたものだと思いますか? –

+0

はい、申し訳ありませんでしたが、これはタイプミスでした。タイトルにも最後を追加します。 – praks5432

答えて

10

初期化後に変更しない場合は問題ありません。 (これは、static final変数に依存することに注意してください - クラスが初期化される方法は、すべてのスレッドが初期化された配列参照を正しく参照するようにします)。

配列は複数のスレッドから読み取ることができます。失効した結果が気にならない場合は、複数のスレッドから書き込むこともできます。コレクション自体を「破損」させることはありません。 (他の多くのコレクションとは異なり、配列のサイズを変更することはできません...要素自体以外の状態は変更できません)

+0

ええええええええええええええええええええええええええええええええええええええええ、So String = "someStuff" + SOME_CHARS [i] ";そしてある時点でStringを返しますか?これは問題ではありません。新しいStringは古いcharへの参照ではなく新しいcharを持つべきです。 – praks5432

+0

@ praks5432:「新しいchar」と「古いchar」の意味ははっきりしません。charは基本的な型であることを忘れないでください。 –

+0

うーん、だから私はこれを頼んでいると思う - 同じ配列の同じインデックスから得られるものと違うことをすれば配列が変わらないことを保証するのだろうか? – praks5432

関連する問題