728x90
"Runnable"과 "Callable"은 모두 Java 프로그래밍 언어에서 사용되는 인터페이스로, 스레드를 생성하고 실행하기 위해 사용됩니다. 하지만 각각의 차이점이 있습니다.
Runnable
- Java 에서 멀티스레드를 구현하기 위해 사용되는 인터페이스
- Runnable 인터페이스를 구현하는 객체는 'run()'메서드를 구현해야 함
- run() 메서드 안에는 스레드가 실행할 코드가 들어감
- run() 메서드를 실행하는 스레드는 start() 메서드를 호출하여 시작할 수 있음
public class MyRunnable implements Runnable {
@Override
public void run() {
// 스레드가 실행할 작업을 여기에 구현
}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start(); // 스레드 시작
}
}
Callable
- JDK 1. 5 부터 도입된 인터페이스
- Runnable과는 다르게 Callable 은 제네릭 인터페이스로, 반환 값을 가질 수 있음
- Callable 인터페이스를 구현하는 객체는 call() 메서드를 구현해야함
- call() 메서드는 스레드가 실행될 때 호출되고, 실행 결과를 반환함
- Callable을 사용하는 경우에는 'ExecutorSevice'를 사용하여 스레드를 실행함
import java.util.concurrent.*;
public class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
// 스레드가 실행할 작업을 여기에 구현
return 42; // 예시로 정수 42를 반환
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable myCallable = new MyCallable();
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<Integer> future = executorService.submit(myCallable);
// 작업 완료 대기하고 결과 값 가져오기
int result = future.get();
System.out.println("결과: " + result);
executorService.shutdown();
}
}
Runnable 은 스레드를 실행하고 코드를 실행할 수 있는 인터페이스를 제공하며, 반환 값을 가질 수 없습니다.
반면에 Callable 은 스레드를 실행하고 코드를 실행하면서 반환 값을 가질 수 있습니다.
728x90
'3.multi-threading' 카테고리의 다른 글
sleep() vs wait() / notify() vs notifyAll() (0) | 2023.07.27 |
---|---|
스레드의 여러가지 상태 (0) | 2023.07.26 |
데몬 스레드란? / 스레드를 만드는 방법 (0) | 2023.07.24 |
스레드와 프로세스의 차이 (0) | 2023.07.21 |
병렬과 동시성의 차이점 (0) | 2023.07.20 |