반복 한 후 GET()를 사용하여 나는이 같은 코드를 가지고 :ConcurrentHashMap의
private final Map<String, Information> infoMap = new ConcurrentHashMap<String, Information>();
synchronized (infoMap) {
for (final String nameAndVersion : infoMap.keySet()) {
final Information info = infoMap.get(nameAndVersion);
final String name = info.getName();
names.add(name);
}
}
내가 가진 질문은 : 그림과 같이 필요한 keySet 반환의 작업으로, 동기화 된 블록을 사용하는 것입니다() get()는 원 자성이 아닙니다. 따라서 ConcurrentHashMap은 각 개별 호출에 대해서만 스레드 안전성을 가지므로 맵은 한 호출과 다음 호출 사이에서 업데이트 될 수 있습니다.
완전한 반복자가 생성되도록 EntrySet을 반복해야합니까?
keySet() 및 get()이 호출되면 동기화 블록이 필요하다고 생각하지만이 점에 대해서는 확신하지 못합니다.
미리 답변 해 주셔서 감사합니다.