我有一个单例对象。该对象声明:
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”方法,是否会发生异常?有很多线程可以访问单例,所以我想知道在性能影响最小的情况下执行此操作的方法。