카샤의 만개시기
close
프로필 배경
프로필 로고

카샤의 만개시기

  • 분류 전체보기 (105)
    • 만개시기 (1)
    • Foundation (13)
      • Algorithm (3)
      • Operation (1)
      • Network (2)
      • Programming (1)
      • Design Pattern (5)
    • Architecture (1)
      • DDD (1)
    • Java (23)
      • POJO (11)
      • Spring (4)
      • Liferay (1)
      • MSA (7)
    • Kotlin (13)
    • Go언어 (6)
    • Javascript (2)
      • EcmaScript (0)
      • Node.js (0)
      • React (0)
    • Swift (0)
    • Python (0)
    • Android (0)
    • IOS (0)
    • Database (4)
      • mySQL (3)
      • MongoDB (0)
      • Oracle (0)
      • Redis (0)
    • DevOps (25)
      • Docker & K8S (17)
      • Ansible (2)
      • Performance Test (4)
      • APM (1)
      • Fluentd (1)
    • Machine Learning (12)
    • Big Data (0)
      • pyspark (0)
    • Review (3)
    • 유용한 정보 (1)
    • 일상 (1)
  • 홈
  • 카테고리
  • 방명록

ConcurrentHashMap

1. ConcurrentHashMap이란?ConcurrentHashMap은 멀티스레드 환경에서 동시에 여러 스레드가 안전하고 빠르게 데이터를 읽고 쓸 수 있도록 설계된 해시맵입니다.기존의 HashMap은 스레드에 안전하지 않아 동시 접근 시 데이터 손상이나 무한 루프 같은 심각한 문제가 발생하지만, ConcurrentHashMap은 이를 해결했습니다.2. ConcurrentHashMap 동작 원리2-1. 세분화된 락 (Lock Striping)자바 7 이전에는 ConcurrentHashMap이 내부적으로 데이터를 여러 세그먼트(segment)로 나누고, 각 세그먼트별로 락을 걸어 동시 접근을 허용했습니다.이 덕분에 전체 맵이 아닌 해당 세그먼트에만 락이 걸려, 동시성 성능이 크게 향상됐죠.2-2. 자바 ..

  • format_list_bulleted Java/POJO
  • · 2025. 9. 29.
  • textsms

HashMap / Hashtable / ConcurrentHashMap: null 허용 규칙

Java에서 Map을 쓸 때 키/값에서 null을 허용하는지 여부에 대해서 알아보고자 합니다.한눈에 보기 컬렉션null 키null 값메모HashMap✅ (정확히 1개)✅ (여러 개 가능)get(k)가 null이면 “키 없음” 또는 “값이 null”일 수 있음 → containsKey(k)로 구분 필요Hashtable❌❌put/get에 null 사용 시 NullPointerExceptionConcurrentHashMap❌❌동시성·원자적 연산 일관성을 위해 null 금지 (compute/merge의 null 반환은 제거/미삽입 신호) 왜 규칙이 다를까?1) HashMap — 편의성 + 현대적 APIcontainsKey가 있어 get 결과가 null이어도 존재 여부를 구분 가능그래서 키 1개 null + 여..

  • format_list_bulleted Java/POJO
  • · 2025. 9. 29.
  • textsms

동기화 클래스 5편 - Executors, FutureTask, Future

실제 결과가 필요한 시점보다 훨씬 이전에 시간이 많이 필요한 작업을 미리 해두는 용도로 사용합니다. FutureTask는 시작 전 대기, 시작됨, 종료 3가지 상태로 구분할 수 있고 한번 종료상태가 되면 더 이상 상태가 바뀌지 않습니다. Future.get()메소드는 FutureTask의 작업이 종료되면 그 결과를 즉시 알려줍니다. class MyRunnable implements Runnable { private final long waitTime; public MyRunnable(int timeInMillis) { this.waitTime = timeInMillis; } @Override public void run() { try { Thread.sleep(waitTime); System.out.pr..

  • format_list_bulleted Java/POJO
  • · 2019. 7. 3.
  • textsms

동기화 클래스 4편 - Exchanger

두 쓰레드 간에 인스턴스를 교환해주는 역할로 사용합니다. 예제를 통해서 알아보도록 하겠습니다. 메모리를 할당하는 A 쓰레드와 메모리를 해제하는 B 쓰레드가 있다고 할 때 A는 자신의 스택에 계속 데이터를 추가하고 쌓여있는 메모리를 해제하기 위해 A는 B와 스택을 교환하게 되고, 그러면 B는 교환 된 스택을 전부 비웁니다. public final static int MAX_STACK_CNT = 8; private Exchanger exchanger = new Exchanger(); class PushThread implements Runnable { LinkedList stack = new LinkedList(); private Scanner sc = new Scanner(System.in); public..

  • format_list_bulleted Java/POJO
  • · 2019. 7. 3.
  • textsms

동기화 클래스 3편 - CyclicBarrier

실행중인 쓰레드 내부 원하는 지점에서 대기를 걸어주고 CyclicBarrier 생성자의 파라미터로 넘겨준 값 만큼 await()을 호출하면 대기하고 있던 쓰레드들의 대기를 풀어주는 동작을 할 수 있습니다. private static final int THREAD_CNT = 5; private CyclicBarrier cyclicBarrier = new CyclicBarrier(THREAD_CNT); public class SleepThread implements Runnable { private int id = 0; private Random random = new Random(System.currentTimeMillis()); public SleepThread(int id) { this.id = id;..

  • format_list_bulleted Java/POJO
  • · 2019. 7. 3.
  • textsms

동기화 클래스 2편 - CountDownLatch

백그라운드로 스레드가 돌아가고 있는 상황에서 해당 스레드가 종료 되기를 기다려야 하는 상황이 있을때 Thread 클래스의 join() 함수를 이용하면 됩니다. 그렇지만 하나가 아닌 여러 스레드들이 종료되기를 기다려야 하는 상황이 발생된다면 CountDownLatch를 고려할 수 있습니다. private static final int THREAD_CNT = 10; private CountDownLatch lacth = new CountDownLatch(THREAD_CNT); public class SleepThread implements Runnable { private int id = 0; private static Random random = new Random(System.currentTimeMill..

  • format_list_bulleted Java/POJO
  • · 2019. 7. 3.
  • textsms
  • navigate_before
  • 1
  • 2
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (105)
    • 만개시기 (1)
    • Foundation (13)
      • Algorithm (3)
      • Operation (1)
      • Network (2)
      • Programming (1)
      • Design Pattern (5)
    • Architecture (1)
      • DDD (1)
    • Java (23)
      • POJO (11)
      • Spring (4)
      • Liferay (1)
      • MSA (7)
    • Kotlin (13)
    • Go언어 (6)
    • Javascript (2)
      • EcmaScript (0)
      • Node.js (0)
      • React (0)
    • Swift (0)
    • Python (0)
    • Android (0)
    • IOS (0)
    • Database (4)
      • mySQL (3)
      • MongoDB (0)
      • Oracle (0)
      • Redis (0)
    • DevOps (25)
      • Docker & K8S (17)
      • Ansible (2)
      • Performance Test (4)
      • APM (1)
      • Fluentd (1)
    • Machine Learning (12)
    • Big Data (0)
      • pyspark (0)
    • Review (3)
    • 유용한 정보 (1)
    • 일상 (1)
최근 글
인기 글
최근 댓글
태그
  • #cloud native
  • #Kotlin
  • #devops
  • #Spring
  • #코틀린
  • #쿠버네티스
  • #java
  • #Microservice
  • #MSA
  • #클라우드 네이티브
전체 방문자
오늘
어제
전체

티스토리툴바