SimpleDateFormat 동시성 문제부터 불변 객체까지
서비스의 날짜 변환 유틸에서 간헐적으로 발생한 ArrayIndexOutOfBoundsException을 추적하며 찾은 SimpleDateFormat 동시성 문제의 원인과 같은 유형의 사례, 불변 객체를 정리합니다.
서비스의 날짜 변환 유틸에서 간헐적으로 발생한 ArrayIndexOutOfBoundsException을 추적하며 찾은 SimpleDateFormat 동시성 문제의 원인과 같은 유형의 사례, 불변 객체를 정리합니다.
데드락이 생기는 네 가지 조건과 운영체제의 예방·회피·감지·무시 전략을 정리하고, InnoDB·JVM·tryLock·락 순서 정렬 같은 실제 도구가 각각 어느 전략에 해당하는지 예제 흐름도로 연결합니다.
한 프로그램 안의 여러 스레드가 같은 데이터를 건드릴 때 쓰는 스핀락·뮤텍스·세마포를 기다리는 방식과 소유권 차이로 비교하고, 순서 신호와 우선순위 역전까지 예제 흐름도로 정리합니다.
JVM 메모리 구조와 Mark·Sweep·Compaction, 세대별 GC의 동작 원리를 정리하고, Serial GC부터 G1 GC, ZGC까지 주요 GC 알고리즘의 단계와 Stop-The-World 구간을 흐름도로 비교합니다.
jstat으로 GC 상태를 모니터링하는 방법과 Young·Old·Metaspace 영역별 증상에 따른 GC 튜닝 기준을 힙 구조, 튜닝 흐름 그림과 함께 정리합니다.
Java의 함수형 인터페이스 Supplier의 정의와 사용법을 예제로 정리하고, 값이 필요한 순간까지 호출을 미루는 지연 초기화에 활용하는 방법을 정리합니다.
for문 대신 자바 Stream으로 리스트·맵 변환, enum 값 찾기, 합계, 중복 체크, null 처리, 문자열 합치기, reduce를 작성한 예제를 정리합니다.
Collectors.toMap()으로 Map을 만들 때 키가 중복되면 발생하는 IllegalStateException(Duplicate Key)과, 세 번째 인자인 Merge Function으로 값을 병합해 해결하는 방법을 정리합니다.
NPE를 막기 위해 사용했던 컬렉션 null 체크(CollectionUtils.emptyIfNull, Optional.ofNullable, isEmpty)와 Lists.partition, Function.identity()로 Map 만들기를 예제와 흐름도로 정리합니다.
프록시 서버를 거쳐 이미지를 받아 오는 코드에서 getBody() null 체크와 RuntimeException catch가 빠져 발생한 NPE의 원인과, 방어 코드·catch 추가로 해결한 과정을 정리합니다.
Java 21에서 정식 도입된 Virtual Thread가 Carrier Thread에 mount·unmount되는 방식을 운영체제의 멀티프로그래밍·멀티태스킹·멀티스레딩 개념과 연결해 흐름도로 설명하고, pinning을 포함한 장단점과 사용 시기를 정리합니다.
Java에서 멀티스레드로 공유 변수를 증가시킬 때 레이스 컨디션이 생기는 과정을 스레드 실행 순서 흐름도로 살펴보고, synchronized·ReentrantLock·AtomicInteger로 해결하는 방법과 volatile의 한계를 정리합니다.