2014-02-19 9 views
4

ThreadLocalConcurrentHashMap 사이의 성능 차이에 관한 아주 간단한 질문이 있습니다. 내 코드의 일부 장소에서 Thread에서 일부 Object으로 매핑을 유지해야하며, 이는 스레드로부터 안전해야합니다. 하나의 옵션은 ConcurrentHashMap을 사용하고 다른 하나는 ThreadLocal을 사용하는 것입니다. 이러한 접근법 중 하나의 장점/단점은 대부분 속도면에서입니까?Java - ThreadLocal 대 ConcurrentHashMap

+0

개체를 소유 한 스레드가 해당 개체에 액세스해야하는 유일한 개체입니까? 그렇다면, 왓킨스 (Jwatkins)가 지적했듯이,'ThreadLocal '이 분명히 더 낫다. 그렇지 않으면이 스레드 간 액세스가 어떤 형태로 이루어질 것인지 질문해야합니다. – selig

+0

@SotiriosDelimanolis : 귀하의 진술은 jwatkins의 – okwap

+0

@okwap과 충돌합니다. 내가 틀렸어. 댓글을 삭제했습니다. 감사. –

답변

7

이것은 확실히 ThreadLocal의 경우입니다. ThreadLocal 값은 동시 맵이 아닌 Thread 객체에 저장되므로 잠금이 전혀 필요하지 않으므로 훨씬 효율적입니다. 또한 ThreadLocal을 통해 스레드에 연결된 값은 스레드가 종료 될 때 자동으로 삭제되며 ConcurrentHashMap에서는 발생하지 않습니다. 한 가지 마지막 사항 : 풀에 보관 된 작업자와 같이 어떤 방식 으로든 "재사용"된 스레드가있는 경우 스레드를 풀로 반환하기 전에 ThreadLocal의 값을 지워야합니다.