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; } }