Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 Runnable과 Callable 인터페이스의 차이점

<시간/>

Runnable 및 Callable 모두 기능적 인터페이스입니다. 이러한 인터페이스를 구현하는 클래스는 다른 스레드에서 실행되도록 설계되었습니다.

스레드는 Ruunable로 시작할 수 있으며 새 스레드를 시작하는 두 가지 방법이 있습니다. 하나는 Thread 클래스를 서브클래싱하는 것이고 다른 하나는 Runnable 인터페이스를 구현하는 것입니다.

Thread 클래스에는 호출 가능한 생성자가 없으므로 스레드를 실행하려면 ExecutorService 클래스를 사용해야 합니다.

Sr. 아니요. 실행 가능 호출 가능
1
패키지
Java.lang에 속합니다.
java.util.concurrent에 속합니다.
2
스레드 생성
runnable을 매개변수로 전달하여 스레드를 생성할 수 있습니다.
콜러블을 매개변수로 전달하여 스레드를 생성할 수 없습니다.
3
반환 유형
실행 가능은 아무 것도 반환하지 않습니다.
콜러블은 결과를 반환할 수 있습니다.
4.
메소드
run() 메서드가 있습니다.
call() 메서드가 있습니다.
5
대량 실행
작업의 대량 실행에는 사용할 수 없습니다.
invokeAll()을 호출하여 태스크의 대량 실행에 사용할 수 있습니다.

실행 가능의 예

public class RunnableExample implements Runnable {
   public void run() {
      System.out.println("Hello from a Runnable!");
   }
   public static void main(String args[]) {
      (new Thread(new RunnableExample())).start();
   }
}

호출 가능의 예

public class Main {
   public static void main(String args[]) throws InterruptedException, ExecutionException {
      ExecutorService services = Executors.newSingleThreadExecutor();
      Future<?> future = services.submit(new Task());
      System.out.println("In Future Object" + future.get());
   }
}
import java.util.concurrent.Callable;

public class Task implements Callable {

   @Override
   public String call() throws Exception {
      System.out.println("In call");
      String name = "test";
      return name;
   }
}