8

だから私が持っているなら

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]);
     }
}

言い換えれば、char []をスレッドをサポートするある種のJavaコレクションに入れる必要がありますか?

4

1 に答える 1

10

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

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

于 2012-10-29T08:02:40.007 に答える