울음참고 개발공부
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
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!