Java에서의 스레드 풀과 비동기 작업 처리: Executor, Callable, Future, FutureTask

스레드 관리의 핵심: 실행자 패턴 소개 기존의 Thread와 Runnable을 직접 사용하는 방식은 스레드 생성/종료의 부담이 크며, 성능 저하를 초래할 수 있습니다. 대신 Executor 계층 구조를 활용하면 스레드의 생명주기 관리와 작업 제출을 분리할 수 있습니다. 실행자 인터페이스의 계층 구조 Executor: 단순한 작업 제출 기능만 제공 (execute(Runnable)) ExecutorServic ...

7월 13일 21:34에 게시됨

Java 멀티스레딩 구현과 락 활용 및 실행 결과 처리 기법

기본 스레드 구현: Runnable 인터페이스 활용 Runnable 인터페이스를 구현할 때 주의점: 작업 객체 인스턴스 생성은 반복문 외부에서 수행해야 합니다. 반복문 내에서 생성할 경우 락 동기화가 제대로 동작하지 않습니다. @Controller @RequestMapping("/task") public class TaskProcessor implements Runnable { private final Lock taskLock = new ReentrantL ...

7월 3일 06:30에 게시됨

스레드 풀에서 발생한 예외를 메인 스레드가 잡을 수 있을까?

과거에는 스레드 풀에서 발생한 예외를 메인 스레드가 잡을 수 있다고 생각했지만, 최근 시스템 장애 상황에서 스레드 풀 태스크에 예외 처리 코드가 없으면 메인 스레드의 catch 블록이 예외를 잡지 못해 문제 진단이 어려웠습니다. 이에 대한 내용을 연구하고 기록합니다. 1. JVM 예외 처리 JVM이 처리되지 않은 예외를 어떻게 다루는지 살펴보겠습니다. @Test public v ...

6월 26일 02:51에 게시됨

Java에서 병렬 처리를 구현하는 네 가지 접근 방식: 스레드, 실행기, 포크조인, 액터

병렬 세계 속의 자바 프로그래밍 현실 세계는 본질적으로 동시적이다. 다양한 사건이 동시에 발생하며, 이 특성을 반영하여 소프트웨어도 병렬로 동작하도록 설계된다. JVM 위에서 실행되는 자바 코드는 이러한 병렬성을 효과적으로 활용할 수 있다. 반면, 일부 언어는 GIL(Global Interpreter Lock)과 같은 제약으로 인해 진정한 병렬성을 달성하기 어렵다. 하지만 인간 ...

5월 29일 03:32에 게시됨