두 스레드를 통해 동기화하려고하는 맵 내의 맵 내에 중첩 세트가 있습니다.중첩 된 맵 및 세트 동기화 (Java)
지도는 같은 인스턴스화 : 이것은 내가지도에 값을 추가 할 수있는 기능입니다
private final Map<Manageable, Map<String, Set<Manageable>>> manageableMap =
Collections.synchronizedMap(new HashMap<Manageable, Map<String, Set<Manageable>>>());
:
private void put(Manageable key, Manageable value, String valueType) {
synchronized (manageableMap) {
Map<String, Set<Manageable>> setMap = manageableMap.get(key);
if (setMap == null) {
setMap = new HashMap<String, Set<Manageable>>();
manageableMap.put(key, Collections.synchronizedMap(setMap));
}
synchronized (setMap) {
Set<Manageable> set = setMap.get(valueType);
if (set == null) {
set = new HashSet<Manageable>();
setMap.put(valueType, Collections.synchronizedSet(set));
}
synchronized (set) {
set.add(value);
}
}
}
}
하게 IntelliJ IDEA 내가 로컬 변수에 동기화하고 나에게 경고를하는 setMap 설정합니다.
나는 동기화에 상당히 익숙하며이 방법이 중첩 된 데이터 구조를 동기화하는 적절한 방법인지 궁금합니다.
도움 주셔서 감사합니다.
동의 ... ..... – Bozho
답장을 보내 주셔서 감사합니다. 나는 아직도이 동기화하는 것에 익숙해있다. 다른 시간에 동기화 된 블록을 사용해야합니까? – miningold
복잡한 주제입니다. 이 책은 더 배우기를 원할 때 훌륭한 책입니다. http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601 – sbridges