这是我第一次使用synchronized
关键字,所以我仍然不确定它是如何工作的。我有一个希望被多个线程访问的列表,所以我这样做:
players = Collections.synchronizedList(new ArrayList<Player>(maxPlayers));
现在,我想确保我不会players.add()
同时调用players.get()
,所以我认为我应该使用同步语句(方法 A 和 B 可以同时调用):
public void A() {
synchronized(players) {
players.add(new Player());
}
}
public void B(String msg) {
synchronized(players) {
for(int i = 0;i<players.size();i++) {
players.get(i).out.println(msg);
}
}
}
这是正确的程序吗?如果没有,我应该怎么做?