次のようなオブジェクトの大きな ArrayList があります
class Entry {
private String variable1 = null;
private int variable2 = 0;
public Entry (String variable1) {
this.variable1 = variable1;
}
/* getters and setters for variable1 and 2 are below */
}
ArrayList でオブジェクトを開始してから、複数のスレッドを作成します。各スレッドは、大量のドキュメント セットを検索して、変数 1 の内容がドキュメントに埋め込まれているかどうかを判断します。そうである場合、以下のように、スレッドに固有のエントリのコピーを作成したいと思います。
public Entry(Entry entry) {
this(entry.getVariable1())
}
次に、オリジナルではなくコピーの variable2 の内容を変更したいと考えています。要約する:
- オブジェクトの値は、スレッド化の前に初期化されます。
- オブジェクトは複数のスレッドによって共有 (読み取り専用) されます。
- オブジェクトを変更する必要がある場合、オブジェクトのコピーが作成され、そのコピーに変更が加えられます。
これが私の質問です。
- variable1 と variable2 の getter と setter を同期する必要がありますか。スレッド間で共有されているときにオブジェクトを読み取っているだけなので、これは不必要に思えますが、間違っている場合は修正してください。
- 情報の大きな配列リストを共有するためのより良い方法はありますか? (200Kを超えるオブジェクトで巨大であるため、各スレッドのarraylistをコピーしたくありません)?