シングルトンのオブジェクトがあります。このオブジェクトは次を宣言します。
List<Player> players = new ArrayList<Player>();
同じオブジェクトは、この arrayList で 4 つの操作も指定します。
public List<Player> getPlayers() {
return players;
} // the result of this method can be used in another object as an iterator (or maybe by index-access)
と
public void removePlayer(Player player) {
players.remove(player);
}
public void addPlayer(Player player) {
players.add(player);
}
public boolean isPresent(Player player) {
if (players.constans(player)) {...
}
現在、コンストラクターで次のようにしています。
players = Collections.synchronizedList(new ArrayList<Player>());
しかし、これらのメソッドを同期する正しい方法は何ですか? 別のクラスでイテレータを使用すると、同時変更例外が発生するようです。2 つのスレッドが「remove」メソッドと「contains」メソッドを同時に呼び出すと例外が発生しますか? シングルトンにアクセスするスレッドが多いので、パフォーマンスへの影響を最小限に抑えてこれを行う方法を知りたいです。