의문점 공부하기/📌 Java

📌 runnable과 callable의 차이는 무엇일까??

아리빠 2023. 7. 20. 18:04

Runnable:

  • Runnable은 Java 1.0에서 도입된 함수형 인터페이스
  • 동시에 실행될 수 있는 작업을 나타내지만 결과를 반환하지 않는다
  • Runnable의 run() 메서드는 인자를 받지 않고 void를 반환한다
  • run() 메서드 내에서 발생한 예외는 run() 메서드 외부에서 잡거나 처리할 수 없다
Runnable runnable = () -> {
    // 작업 수행
    System.out.println("Runnable 작업 실행");
};

Thread thread = new Thread(runnable);
thread.start();

Callable:

  • Callable은 java.util.concurrent 패키지의 일부로 Java 1.5에서 도입된 함수형 인터페이스
  • 동시에 실행될 수 있는 작업을 나타내며 결과를 반환한다
  • Callable의 call() 메서드는 특정 타입의 결과를 반환하고, 체크된 예외를 던질 수 있다
  • call() 메서드 내에서 발생한 예외는 외부에서 잡고 처리할 수 있다
Callable<String> callable = () -> {
    // 작업 수행
    return "Callable 작업 실행";
};

ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<String> future = executorService.submit(callable);

try {
    String result = future.get();
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    // 예외 처리
} finally {
    executorService.shutdown();
}

- Runnable은 결과를 반환하지 않고 외부에서 잡고 처리할 수 있는 체크된 예외를 던질 수 없다

- Callable은 결과를 반환하고 외부에서 잡고 처리할 수 있는 체크된 예외를 던질 수 있다