자바 멀티스레드 공부하다 보면 어느 순간 이런 생각이 든다."Thread를 직접 계속 생성해도 되나?"가능은 하다.근데 실무에서는 거의 잘 안 쓴다.왜냐면:✔ 스레드 생성 비용 큼✔ 너무 많이 생성하면 성능 저하✔ 관리 어려움✔ 메모리 사용 증가문제가 생기기 때문이다.그래서 실무에서는 대부분:👉 ExecutorService를 사용한다.오늘은 초보자도 이해할 수 있게ExecutorService 사용법을 쉽게 정리해보겠다.ExecutorService 란?👉 스레드를 효율적으로 관리해주는 스레드 풀(Thread Pool) 시스템쉽게 말하면:스레드를 미리 만들어두고재사용하는 구조이다.왜 사용할까?만약 요청마다:new Thread()계속 생성하면:✔ 생성 비용 증가✔ 메모리 사용 증가✔ 컨텍스트 스위칭 증가발..
자바로 네트워크 통신이나 비동기 처리하다 보면 한 번쯤 꼭 보게 되는 예외가 있다.👉 TimeoutException이건 단순 에러가 아니라,"정해진 시간 안에 작업이 끝나지 않았을 때" 발생하는 문제다.실무에서도 진짜 자주 나온다. 특히 API, DB, 멀티스레드에서.TimeoutException 이란?👉 "작업이 제한 시간 내에 완료되지 않았을 때 발생하는 예외"즉,✔ 기다릴 만큼 기다렸는데✔ 결과가 안 왔을 때👉 그냥 강제로 실패 처리하는 개념이다.가장 기본적인 예제 (Future)import java.util.concurrent.*;public class Main { public static void main(String[] args) throws Exception { Exe..
멀티스레드나 비동기 처리(Future, ExecutorService)를 쓰기 시작하면 한 번쯤 마주치는 예외가 있다.👉 ExecutionException이건 처음 보면 “뭐가 실행이 잘못됐다는 거지?” 싶지만,핵심은 굉장히 명확하다.ExecutionException 이란?👉 "비동기 작업에서 발생한 예외를 감싸서 전달하는 Wrapper 예외"즉,✔ 실제 에러는 따로 있고✔ 그 에러를 ExecutionException이 감싸서 던진다가장 중요한 포인트👉 진짜 원인은 따로 있다 (getCause로 확인해야 함)이걸 모르면 디버깅 계속 헤맨다.기본 예제 (Future)import java.util.concurrent.*;public class Main { public static void main(..