2011-01-15 13 views
4

동시 해시 맵을 사용하고 있고 값이 설정된 메소드가있는 경우, 동시 해시 맵을 사용하여 getter와 setter를 동기화해야합니다. 중복인가? 하나의 디자인이 더 좋습니까?동시 해시 맵에 동기화 된 getter/setter가 필요하지 않습니까?

동기화 된 getters 및 setter가있는 hashmap보다 빠른 동기화가없는 동시 해시 맵입니까? 이

+0

무엇을 설정하고 있습니까? put과 get을 사용하여 값을 설정 하시겠습니까? 또는 해시 맵 자체에 대한 getter 및 setter를 만들 수 있습니까? –

+0

예, 내 메서드는 put 및 get을 포함합니다. – Jason

답변

7
  1. java.util.concurrent.ConcurrentHashMap 당신이 아직하지 않은 "논리적"경주를 만들기 위해주의해야 synchronized(object)
  2. 를 사용하는 것보다 빠른

  3. 스레드 안전 당신을 감사 고성능 시스템에 대한 조건 코드는 다음과 같습니다.

    if (map.get(key) != null) { 
        map.put(key, new SomethingStrictlyUnique()); 
    } 
    
  4. 대개의 경우, synchroni 동시 콜렉션이있는 zed 콜렉션은 큰 위험을 무릅 쓰고 극적으로 확장 성을 제공 할 수 있습니다. the javadoc 따르면

  5. , ConcurrentHashMap에 의해 반환 반복자 "약 일관성"이다 (대신 빠른 고장) 반복기를 제조 하였다 때 동시 변형을 견딜 수 있도록, 이송 요소들이 존재로하고 수정을 반영 반복자의 구축 후의 콜렉션 당신은 단지 하나의 작업 (같은 단지 주어진 키에 대한지도 값) 또는 스레드 안전 운전을 반환 방법을 얻을, 당신은 필요가 없습니다 않는 게터 & setter 메소드를 한 경우

1

1) 그 getter에 대한 명시적인 동기화 된 블록 & setter.

2) 예, 동기화 된 블록이없는 동시 해시 맵을 사용하면 성능이 크게 향상됩니다.

참고 : ConcurrentHashMap은 약하게 일관성이 있으며 대부분의 경우 수용 가능합니다.

관련 문제