Я впервые использую ключевое слово synchronized
, поэтому я до сих пор не уверен, как оно работает. У меня есть список, к которому я хочу получить доступ из нескольких потоков, поэтому я делаю это:
players = Collections.synchronizedList(new ArrayList<Player>(maxPlayers));
Теперь я хочу убедиться, что я не вызываю players.add()
одновременно с players.get()
, поэтому я думаю, что я должен использовать синхронизированные операторы (методы A и B могут быть вызваны одновременно): 1007 *
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);
}
}
}
Это правильная процедура? Если нет, то что мне делать вместо этого?