Future 3

Thread, Future, CompletableFuture 란

Thread 스레드가 하나인 경우를 싱글 스레드, 하나 이상인 경우를 멀티 스레드라 부른다. 멀티 스레드를 사용하면 애플리케이션에서 여러개의 작업을 동시에 할 수 있다. 멀티 스레드를 사용하면 스케쥴링 알고리즘에 의해 스레드가 전환되면서 작업을 처리하는데 이를 컨텍스트 스위칭이라 부른다. 하나의 프로세스에는 최소 하나 이상의 스레드가 존재하고 프로세스 내에 스레드들은 동일한 메모리를 공유한다. 스레드가 무한정 많아지면 메모리 사용량이 높아져 OOME 가 발생할 수 있고 동시 처리량을 요구하는 시스템에서는 스레드를 생성하면서 발생하는 대기 시간 때문에 응답 지연이 발생한다. 이러한 문제를 해결하기 위해 스레드 풀을 사용해야 한다. 스레드 풀을 사용하면 애플리케이션 내에서 사용할 총 스레드 수를 제한할 수..

Spring/Webflux 2024.01.27

토비의 봄 TV - 자바의 비동기 기술 (4) 1/2

ExcutorService 쉽게 비동기로 작업을 실행할 수 있도록 도와주는 JDK(1.5부터)에서 제공하는 interface 이다. 일반적으로 ExecutorService는 작업 할당을 위한 스레드 풀과 API를 제공한다. @Slf4j public class ExcutorServiceApp { public static void main(String[] args) { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } log.info("Async"); System.out.print..

Spring/Webflux 2022.06.17

CompletableFuture (3) - Callable 과 Future

Thread는 Runnable과 Callable의 구현된 함수를 수행한다는 공통점이 있지만, 다음과 같은 차이점이 있다. Runnable: 어떤 객체도 리턴하지 않습니다. Exception을 발생시키지 않습니다. Callable: 특정 타입의 객체를 리턴합니다. Exception을 발생킬 수 있습니다. Callable 이전까지 사용했던 Runnable과 유사하지만 작업의 결과(return) 를 받을 수 있다. Future Future 는 자바 1.5 에 등장한 비동기 계산 결과를 나타내는 인터페이스 비동기적인 작업의 현재 상태를 조회하거나 결과를 가져올 수 있다. Future를 이용하면 멀티쓰레드 환경에서 처리된 어떤 데이터를 다른 쓰레드에 전달할 수 있다. Future 내부적으로 Thread-Safe ..