본문 바로가기
Language/JAVA

동시성 프로그래밍을 위한 유용한 클래스와 인터페이스

by 코젼 2024. 7. 16.
728x90
반응형

목차

    # 요약

    • ExecutorService: 스레드 풀을 추상화한 인터페이스로, 작업을 제출하고 실행하는 기능을 제공한다.
    • Executors: 다양한 유형의 스레드 풀을 생성하는 팩토리 메서드를 제공하는 유틸리티 클래스이다.
    • CountDownLatch: 다른 스레드가 주어진 작업을 완료할 때까지 대기하는 동기화 도구이다.
    • CompletableFuture: 비동기적으로 작업을 실행하고 결과를 처리하는 클래스로, 다양한 비동기 작업 처리 기능을 제공한다.

    ExecutorService

    스레드 풀을 추상화한 인터페이스이다. 주어진 작섭을 실행하고 관리하는 기능을 제공한다.

    ExecutorService executorService = Executors.newFixedThreadPool(10); // 스레드 풀 생성
    
    // 작업 제출 및 실행
    executorService.submit(() -> {
        // 작업 내용
    });
    
    executorService.shutdown(); // 모든 작업 실행 후 스레드 풀 종료

     

    Executors

    ExecutorService 인스턴스를 생성하는 팩토리 메서드들을 제공한다.

    다양한 유형의 스레드 풀을 만들 수 있으며, 각각의 풀은 특정 용도에 맞게 설정될 수 있다.

    주요 팩토리 메서드

    • newFixedThreadPool(int n): 고정 크기의 스레드 풀을 생성한다.
    • newCachedThreadPool(): 필요에 따라 스레드를 생성하고 재사용하는 캐시 스레드 풀을 생성한다.
    • newSingleThreadExecutor(): 단일 스레드에서 작업을 처리하는 스레드 풀을 생성한다.

    CountDownLatch

    하나 이상의 스레드가 일시 중지되고, 다른 스레드가 주어진 작업을 완료할 때까지 기다리는 동기화 도구이다.

    주어진 개수만큼의 카운트가 감소하면 대기 중인 스레드들이 깨어난다.

    CountDownLatch latch = new CountDownLatch(1); // 카운트 초기화
    
    // 스레드 1
    new Thread(() -> {
        try {
            // 작업 수행
            latch.countDown(); // 카운트 감소
        } catch (Exception e) {
            e.printStackTrace();
        }
    }).start();
    
    // 스레드 2
    new Thread(() -> {
        try {
            latch.await(); // 다른 스레드가 countDown() 호출할 때까지 대기
            // 카운트가 0이 되면 이 부분 실행
        } catch (Exception e) {
            e.printStackTrace();
        }
    }).start();

     

    CompletableFuture

    비동기적으로 결과를 계산하고 처리할 수 있도록 도와주는 클래스이다.

    다른 스레드에서 실행되는 작업의 결과를 기다리거나, 여러 작업의 결과를 조합하거나, 타임아웃을 설정하는 등의 기능을 제공한다.

    CountDownLatch latch = new CountDownLatch(1); // 카운트 초기화
    
    // 스레드 1
    new Thread(() -> {
        try {
            // 작업 수행
            latch.countDown(); // 카운트 감소
        } catch (Exception e) {
            e.printStackTrace();
        }
    }).start();
    
    // 스레드 2
    new Thread(() -> {
        try {
            latch.await(); // 다른 스레드가 countDown() 호출할 때까지 대기
            // 카운트가 0이 되면 이 부분 실행
        } catch (Exception e) {
            e.printStackTrace();
        }
    }).start();
    728x90
    반응형

    댓글