[JAVA] Callable vs Runnable

[JAVA] Callable vs Runnable

Last modified on 2025-04-18 , by hjjae2

Callable, Runnable 에 대해서 이해해보기


Java는 Multi-Threading 이라는 기술(기능)을 제공한다.
Runnable, Callable 인터페이스를 통해 Multi-Threading 기능을 설계할 수 있다.

  • Runnable : Multi-Threading 을 위해 제공되는 interface 이다.
  • Callable : Runnable의 개선된 버전이다. (자바 5에서 추가)

두 인터페이스 모두 Multi-Threading 을 위한 것이다.

특징RunnableCallable
RETURN리턴 타입 X리턴 타입 O
EXCEPTIONException 발생 XException 발생 O
비고Multi-Threading 을 위해 제공되는 interface 이다.
Thread, ExecutorService 클래스 등을 통해 사용될 수 있다.
Runnable의 개선된 버전이다. (자바 5에서 추가)
ExecutorService, FutureTask 클래스 등을 통해 사용될 수 있다.

Callable #

/**
 * 1. Return 타입이 존재한다.
 * 2. Exception 을 발생시킨다.
 */
public interface Callable<V> {
    V call() throws Exception;
}

public Example {
    public class MyCallable implements Callable<String> { // (String)Return Type 이 존재한다.
        @Override
        public String call() throws Exception { // Exception 을 발생시킨다.
            return "Hello!";
        }
    }
}

Runnable #

/**
 * 1. Return 타입이 없다.
 * 2. Exception 이 없다.
 */
public interface Runnable {
    public abstract void run();
}

public Example {
    public class MyRunnable implements Runnable {
        @Override
        public void run() { // (void)Return Type 이 없고, Exception 을 발생시키지 않는다.
            System.out.println("Hello!");
        }
    }
}



참고 #