본문 바로가기
728x90

Backend41

[Java] CompletableFuture를 활용한 비동기 프로그래밍 [Java] CompletableFuture를 활용한 비동기 프로그래밍1. 기존 Future의 한계// ExecutorService + Future 사용 예시ExecutorService exec = Executors.newFixedThreadPool(4);Future future = exec.submit(() -> { simulate(); // 작업 수행 return "서버 응답 데이터";});String result = future.get(); // 블로킹: 호출 스레드가 여기서 멈춰 대기// Future 작업이 완료 된 후 이후 로직 실행 블로킹 호출: Future.get() 호출 시 작업이 끝날 때까지 스레드가 멈춥니다.콜백 구성 번거로움: 작업 완료 후 후속 로직을.. 2025. 5. 5.
[Java] ☕ Executor 프레임 워크 [Java] ☕ Executor 프레임 워크Executor 프레임워크는 Java에서 스레드를 생성하고 관리하는 표준화된 방법을 제공한다.전통적으로 우리는 new Thread()를 사용해 스레드를 하나하나 직접 만들었을 때 잘못사용하게 되면 다음과 같은 문제점들이 있었다.리소스 낭비 (새 스레드를 만들 때마다 메모리/CPU 소모)스레드 수 관리 실패 (수천 개 스레드가 생성되어 시스템 다운)코드 복잡도 증가 (어디서 누가 스레드를 돌리고 있는지 추적하기 힘듦)직접 만든 스레드는 작업이 끝나도 계속 살아있거나 제대로 종료되지 않아서 리소스를 점유한다.직접 만든 스레드에서는 예외를 잡기 어렵고, 작업 결과를 받아오기 힘듦 Executor 프레임워크는 이 모든 문제를 해결하기 위해 등장했다. Executor는 .. 2025. 4. 27.
[Java] 🚦 자바 메모리 가시성(Java Memory Visibility) [Java] 🚦 자바 메모리 가시성(Java Memory Visibility) Java와 같은 멀티스레드 환경에서 각 스레드는 성능 향상을 위해 메인 메모리(Heap)에 있는 변수의 복사본을 자신의 캐시(CPU 캐시 등)에 저장하여 사용합니다. 스레드가 변수 값을 변경하면, 이 변경 내용은 즉시 메인 메모리에 반영되지 않고 자신의 캐시에만 반영될 수 있습니다. 이때 다른 스레드가 해당 변수 값을 읽으려 하면, 메인 메모리에 아직 반영되지 않은 오래된 캐시 값을 읽거나 전혀 다른 값을 읽을 수 있습니다. 이처럼 한 스레드의 변수 변경 결과를 다른 스레드가 즉시(또는 적절한 시점에) 볼 수 없는 현상을 메모리 가시성 문제라고 합니다. Spring 애플리케이션에서 여러 웹 요청이 같은 서비스 빈의 상태를 .. 2025. 4. 20.
[Java] ☕ Thread 정리: 메서드, 생명주기, 제어 방법 [Java] ☕ Thread 정리: 메서드, 생명주기, 제어 방법 멀티스레드는 자바에서 병렬 처리를 구현하는 핵심 개념 중 하나다. 이 글에서는 Thread 클래스가 제공하는 주요 메서드부터, 스레드의 생명주기 및 제어 방법까지 핵심만 정리해서 소개한다.  🧵 1. Thread 클래스가 제공하는 주요 메서드 자바의 Thread 클래스는 스레드 실행을 위한 다양한 메서드를 제공한다. 목적에 따라 크게 3가지 범주로 나눌 수 있다. 1-1. ✅ 실행 관련 메서드메서드설명start()새로운 스레드를 시작하고, 내부적으로 run()을 호출한다.run()스레드에서 실행할 실제 작업을 정의한다. 직접 호출하면 멀티스레드가 아님.join()해당 스레드가 종료될 때까지 현재 스레드를 일시 중지시킨다.join(long.. 2025. 4. 7.
728x90