My Note

왜 스레드 풀 사이즈가 동시성 테스트의 신뢰도를 결정하나?

내 테스트는 정말 동시성을 검증하고 있는가? 동시성 제어 로직을 작성하고 나면, 반드시 테스트 코드를 통해 이를 검증해야 한다. 그런데 이때 스레드 풀(Thread Pool)의 크기를 대충 설정하면, 로직에 버그가 있음에도 불구하고 테스트가 통과되는 문제가 발생할 수 있다. 왜 이런 일이 발생하는지, 그리고 적절한 스레드 숫자는 어떻게 정해야 하는지...

Java 동시성 제어 기법 (3) - 메모리 가시성 문제, 그리고 volatile

Memory Visibility, 가시성 멀티 스레드 환경에서 스레드는 각자의 캐시를 가지는 다른 프로세서에 할당되어 병렬 실행될 수 있다. 스레들이 하나의 변수를 공유하면 각 프로세서의 캐시는 변수의 복사본을 소유하게 된다. 이 때, 여러 스레드에 의해 캐시에 있는 공유 변수에 읽고 쓰는 연산이 수행되면 캐시가 불일치되는 문제(동일한 변수임에도 각 ...

HashMap 해부 (1) : 구조와 데이터의 초기 저장 과정

HashMap, 그 익숙함 속의 깊이 Java 개발자라면 HashMap은 매우 익숙한 컬렉션이다. 키-값 쌍으로 데이터를 저장하고 빠르게 조회할 수 있어 자주 사용하곤 한다. 하지만 이 HashMap이 내부적으로 어떻게 동작하는지, 데이터가 어떤 과정을 거쳐 저장되고 관리되는지 깊이 들여다본 경험은 얼마나 될까? 사실 HashMap은 우리가 흔히 사용...