프로그래밍 공부

자바 Callable 인터페이스 본문

Programming/JAVA

자바 Callable 인터페이스

khj1999 2024. 10. 22. 21:41

Callable 인터페이스는 Java에서 멀티스레딩 프로그래밍을 위한 기능 중 하나로
스레드가 수행할 수 있는 작업을 정의.
Runnable 인터페이스와 유사하지만, Callable은 다음과 같은 중요한 차이점이 있다:

  1. 반환 값: Callablecall() 메서드는 작업의 결과를 반환할 수 있다.
    반면 Runnablerun() 메서드는 반환 값이 없다.
  2. 예외 처리: Callablecall() 메서드는 Exception을 던질 수 있다.
    반면 Runnablerun() 메서드는 체크 예외를 던질 수 없다.

1. Callable 인터페이스 사용법

Callable 인터페이스를 사용하려면, 다음과 같은 단계를 따른다:

  1. Callable 인터페이스를 구현하는 클래스를 작성.
  2. call() 메서드에서 원하는 작업을 수행하고 결과를 반환.
  3. ExecutorServicesubmit() 메서드를 통해 Callable 객체를 제출.

1.1. Callable 인터페이스 예제

아래는 Callable 인터페이스를 사용한 간단한 예제이다.

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableExample {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(2);

        // Callable 작업 정의
        Callable<Integer> task = () -> {
            Thread.sleep(1000); // 작업 수행 (1초 대기)
            return 42; // 결과 반환
        };

        // Callable 작업 제출
        Future<Integer> future = executorService.submit(task);

        try {
            // 결과를 가져옴
            Integer result = future.get(); // 작업이 완료될 때까지 대기
            System.out.println("작업 결과: " + result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        } finally {
            executorService.shutdown(); // ExecutorService 종료
        }
    }
}

2. Future 인터페이스와의 관계

Callable은 주로 Future 인터페이스와 함께 사용된다.
Future는 비동기 작업의 결과를 나타내며, 작업이 완료되었는지, 성공적으로 완료되었는지
또는 예외가 발생했는지를 확인할 수 있는 메서드를 제공한다.

  • get(): 작업이 완료될 때까지 기다린 후 결과를 반환. 작업이 실패하면 예외를 던진다.
  • isDone(): 작업이 완료되었는지 여부를 확인.
  • cancel(): 작업을 취소.

3. Callable과 Runnable의 차이점 요약

특성 Callable Runnable
반환 값 O (call() 메서드가 결과를 반환) X (run() 메서드가 결과를 반환하지 않음)
예외 처리 O (call() 메서드에서 체크 예외 던질 수 있음) X (run() 메서드에서 체크 예외를 던질 수 없음)
사용 예 비동기 작업에서 결과를 반환할 때 사용 비동기 작업에서 결과가 필요 없을 때 사용

결론

Callable 인터페이스는 결과를 반환하고 예외를 처리할 수 있는 비동기 작업을 구현하는 데 유용하다.
이를 통해 멀티스레딩 프로그래밍을 더욱 유연하게 구현할 수 있다.

'Programming > JAVA' 카테고리의 다른 글

자바 Future 인터페이스  (0) 2024.10.22
자바 ExecutorService 메서드  (0) 2024.10.22
JAVA 스레드 ExecutorService 개요  (0) 2024.10.22
JAVA 스레드 활용 메서드  (0) 2024.10.22
JAVA 스레드의 우선순위  (0) 2024.10.22
Comments