Runnable과 Callable의 차이점은 무엇이고 왜 쓰일까?
둘 다 스레드를 만들 때 사용된다. 즉 스레드를 만들어 실행시킨다는 의미는 비동기적으로 실행시킨다는 의미이다.
비동기적으로 실행해야 하는 작업에 대해서 반환값을 받아야 할 때는 Callable 를 쓰고 그 결과를 무시해도 될 때는 Runnable를 사용한다.
Thread는 비동기적으로 실행해야 하는 작업이 있을 때 쓰인다.
기존 Runnable 은 반환값이 없고 체크 예외를 던질 수 없다는 불편함이 있었다.
public interface Runnable {
void run();
}
- Runnable 의 run() 은 반환 타입이 void이다. 따라서 값을 반환할 수 없다.
- 예외가 선업되어 있지 않다. 따라서 해당 인터페이스를 구현하는 모든 메서드는 체크예외를 던질 수 없다.
package java.util.concurrent;
public interface Callable<V> {
V call() throws Exception;
}
- java.util.concurrent 에서 제공되는 기능이다.
- Callable 의 call() 은 반환 타입이 제네릭 V이다. 따라서 반환값을 반환할 수 있다.
- throws Exception 예외가 선언되어있다. 따라서 해당 인터페이스를 구현하는 모든 메서드는 체크 예외인 Exception 과 그 하위 예외를 모두 던질 수 있다.
'JAVA' 카테고리의 다른 글
자바 - IO 기본 (InputStream, OutputStream) (1) | 2025.01.28 |
---|---|
지연 연산 vs 즉시 연산: Kotlin과 Java Stream을 통한 최적화 전략 이해하기 (0) | 2025.01.17 |
ReentrantLock (0) | 2025.01.07 |
Java에서의 지연 초기화,지연 평가 Optional 활용: orElse vs orElseGet (0) | 2025.01.06 |
고급 동기화 - concurrent.Lock (1) | 2025.01.05 |