[JAVA] ConcurrentHashMap 에 대해서

2024. 11. 4. 11:25·개발중/Java
728x90
반응형

ConcurrentHashMap은 Java에서 멀티스레드 환경에서 안전하게 사용될 수 있도록 설계된 해시맵 구현체입니다. 다음은 ConcurrentHashMap의 주요 특징입니다:

  1. 동시성 제공:
    • ConcurrentHashMap은 멀티스레드 환경에서 여러 스레드가 동시에 데이터를 읽고 수정할 수 있도록 설계되었습니다.
    • 내부적으로 분할 잠금(Shard Locking) 메커니즘을 사용하여 성능을 최적화합니다. 이는 맵이 여러 개의 세그먼트(segment) 로 나뉘어 각 세그먼트에 대해 개별적으로 잠금을 걸기 때문에, 여러 스레드가 동시에 다른 세그먼트를 수정할 수 있습니다.
  2. 잠금 수준 최적화:
    • HashTable처럼 전체 맵에 대해 잠금을 걸지 않고, 데이터의 특정 버킷(bucket) 단위에만 잠금을 걸기 때문에 동시성에서 더 좋은 성능을 발휘합니다.
    • Java 8 이후부터는 CAS(Compare-And-Swap) 와 스레드 안전한 배열 구조 등을 사용해 잠금의 필요성을 줄이고, 성능을 향상시켰습니다.
  3. 쓰기 작업의 동시성:
    • put(), remove(), compute() 등의 쓰기 작업 시에는 일부 버킷에 대해 잠금을 걸어 해당 영역에서만 동시성 문제를 방지합니다.
    • 이는 스레드 간의 경합을 줄여 성능을 크게 향상시키며, 동시성 높은 환경에서도 안정적으로 사용할 수 있습니다.
  4. 읽기 작업의 무잠금:
    • 대부분의 읽기 작업(get()) 은 잠금을 걸지 않고 수행할 수 있습니다. 이는 읽기 연산이 빈번하게 발생하는 상황에서 큰 장점을 제공합니다.
  5. Null 허용하지 않음:
    • ConcurrentHashMap은 key와 value 모두 null을 허용하지 않습니다. 이는 null 값을 처리하는 과정에서 발생할 수 있는 NullPointerException 등의 잠재적인 문제를 방지하기 위함입니다.
  6. 포괄적인 동시성 API:
    • ConcurrentHashMap은 다양한 동시성 작업을 수행할 수 있도록 여러 메서드를 제공합니다. 예를 들어, compute(), merge(), putIfAbsent() 등을 통해 동시성 하에서도 데이터를 안전하게 업데이트 할 수 있습니다.
  7. 성능 및 확장성:
    • ConcurrentHashMap은 읽기-쓰기 경합(read-write contention) 을 줄이기 위해 내부적으로 최적화되어 있으며, 이를 통해 멀티스레드 환경에서 높은 성능과 확장성을 제공합니다.
    • Java 8에서는 bucket 대신 트리화된 구조 (TreeNode)를 사용해 많은 항목이 동일한 해시코드로 해시된 경우 성능이 저하되는 것을 방지하였습니다.

이러한 특징들 덕분에 ConcurrentHashMap은 멀티스레드 환경에서 안전하게 공유 데이터를 관리할 수 있는 매우 유용한 자료 구조로 사용됩니다.

 
 
728x90
반응형
저작자표시 (새창열림)

'개발중 > Java' 카테고리의 다른 글

Java 개발자라면 알아야하는 질문들이라길래 나는 잘 알고 있는가 ?  (0) 2023.08.07
[Java] 객체 매핑 라이브러리 ModelMapper  (0) 2023.03.22
[JAVA] 문자열 받고, 초성으로 반환해주자.  (0) 2023.01.25
[Gson] String => Object Array 활용하기  (0) 2022.11.29
65279 아스키코드가 나와서 문자열 비교 안됨 ?! 😅  (1) 2022.10.19
'개발중/Java' 카테고리의 다른 글
  • Java 개발자라면 알아야하는 질문들이라길래 나는 잘 알고 있는가 ?
  • [Java] 객체 매핑 라이브러리 ModelMapper
  • [JAVA] 문자열 받고, 초성으로 반환해주자.
  • [Gson] String => Object Array 활용하기
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (949)
      • 개발중 (635)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (88)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (28)
        • 기록 (3)
        • 캐글 스터디 (3)
        • R (12)
        • MLOps (10)
      • 논문 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    네트워크 관리사 2급 실기
    리눅스 1급 요약
    네트워크 관리사 자격증
    java
    리눅스 마스터 1급 정리
    네트워크 관리사 요약
    Spring
    Git 저장소
    redis
    파이썬
    네트워크 관리사 2급
    네트워크 관리사
    파이썬 알고리즘
    git
    BackendDevelopment
    리눅스 마스터 1급 요약
    쿠버네티스 스터디
    리눅스 마스터
    쿠버네티스
    VUE
    네트워크 관리사 실기
    알고리즘
    리눅스 마스터 1급
    스프링
    springboot
    네트워크 관리사 학점
    리눅스 마스터 요약
    docker
    jpa
    REST API
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
[JAVA] ConcurrentHashMap 에 대해서
상단으로

티스토리툴바