프로그래밍 공부
자바 Callable 인터페이스 본문
Callable
인터페이스는 Java에서 멀티스레딩 프로그래밍을 위한 기능 중 하나로
스레드가 수행할 수 있는 작업을 정의.Runnable
인터페이스와 유사하지만, Callable
은 다음과 같은 중요한 차이점이 있다:
- 반환 값:
Callable
의call()
메서드는 작업의 결과를 반환할 수 있다.
반면Runnable
의run()
메서드는 반환 값이 없다. - 예외 처리:
Callable
의call()
메서드는Exception
을 던질 수 있다.
반면Runnable
의run()
메서드는 체크 예외를 던질 수 없다.
1. Callable 인터페이스 사용법
Callable
인터페이스를 사용하려면, 다음과 같은 단계를 따른다:
Callable
인터페이스를 구현하는 클래스를 작성.call()
메서드에서 원하는 작업을 수행하고 결과를 반환.ExecutorService
의submit()
메서드를 통해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