synchronized
키워드를 처음 사용하기 때문에 정확하게 작동하는 방식을 아직 확신 할 수 없습니다. 나는 내가이 할 수 있도록 여러 스레드가 액세스 할 수있게하려면 목록이 : 이제동기화 된 목록 사용
players = Collections.synchronizedList(new ArrayList<Player>(maxPlayers));
을, 나는 players.get()
과 동시에 players.add()
를 호출하지하고 있는지 확인하려면, 그래서 내가해야한다고 생각 synchronized 문을 사용하십시오 (메서드 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);
}
}
}
올바른 절차입니까? 그렇지 않다면 대신 무엇을해야합니까?
잠깐, 동기화 된 블록은 멀티 컬러 작업에만 필요합니까? 나는 그것이 단지 정보를 얻고있다라고 생각했다. – TheLQ
예, 두 통화 사이에 끼어들 수있는 다른 스레드의 변경 사항으로부터 여러 호출을 보호하려는 경우 예. 단일 작업은 Collections.synchronizedList() 메서드가 제공하는 장식으로 보호됩니다. –
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#synchronizedList%28java.util.List%29 javadoc은 항상 동기화 된 블록 반복 할 때. – George