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' 카테고리의 다른 글
ReentrantLock (0) | 2025.01.07 |
---|---|
Java에서의 지연 초기화,지연 평가 Optional 활용: orElse vs orElseGet (0) | 2025.01.06 |
고급 동기화 - concurrent.Lock (1) | 2025.01.05 |
생산자 소비자 문제1 (1) | 2024.12.31 |
메모리 가시성 (0) | 2024.12.29 |