logo

Java의 호출 가능 및 미래

Java 멀티스레딩을 사용하면 작업을 동시에 실행할 수 있어 성능과 응답성이 향상됩니다. 전통적으로 개발자는 Runnable 인터페이스를 사용하여 작업을 정의했지만 두 가지 주요 제한 사항이 있습니다. 즉, 결과를 반환할 수 없고 확인된 예외를 발생시킬 수 없습니다. 이러한 문제를 극복하기 위해 Java는 Java 5에 Callable 및 Future 인터페이스를 도입했습니다.

호출 가능 인터페이스

그만큼 호출 가능한 인터페이스 결과를 반환하고 예외가 발생할 수 있는 작업을 나타냅니다. Runnable과 유사하지만 값을 반환하고 확인된 예외를 발생시킬 수 있으므로 더 유연합니다.

Java
import java.util.concurrent.*; public class CallableExample {  public static void main(String[] args) throws Exception {  ExecutorService executor = Executors.newSingleThreadExecutor();  Callable<Integer> task = () -> {  int sum = 0;  for (int i = 1; i <= 5; i++) sum += i;  return sum; // returns result  };  Future<Integer> future = executor.submit(task);  System.out.println('Result: ' + future.get());   executor.shutdown();  } } 

산출
Result: 15 

설명: 호출 가능 태스크가 실행자에게 제출됩니다. 1부터 5까지의 숫자의 합을 계산하여 결과를 반환합니다. 작업이 완료된 후 future.get()을 사용하여 결과를 검색합니다.



미래 인터페이스

그만큼 미래 인터페이스 비동기 계산의 결과를 나타냅니다. Callable 또는 Runnable 작업을 ExecutorService에 제출하면 Future 객체가 반환됩니다.

Java
import java.util.concurrent.*; public class CallableFutureExample {  public static void main(String[] args) {  ExecutorService executor = Executors.newSingleThreadExecutor();  Future<Integer> future = executor.submit(() -> 10 + 20);  try {  Integer result = future.get(); // waits but returns instantly  System.out.println('Result: ' + result);  } catch (Exception e) {  e.printStackTrace();  } finally {  executor.shutdown();  }  } } 

산출
Result: 30 

설명: 그만큼Callable작업이 계산됩니다.10 + 2 and ExecutorService.submit()메소드는Future물체. 사용future.get()계산이 완료되면 결과를 얻습니다.

호출 가능 대 미래

특징호출 가능미래
목적 결과를 반환하는 작업을 나타냅니다.비동기 작업의 결과를 나타냅니다.
반환 유형 실행되면 결과를 반환합니다.Callable이 반환한 결과를 보유합니다.
정의됨 java.util.concurrent 패키지java.util.concurrent 패키지
실행 ExecutorService에 제출됨ExecutorService.submit()에 의해 반환됨
행동 양식 하나의 메소드 call()이 있습니다.get() isDone() cancel()과 같은 메소드가 있습니다.
예외 처리 확인된 예외를 발생시킬 수 있음실행 후 결과 및 예외 처리
용법 무엇을 실행할지 정의합니다.모니터링을 제어하고 작업 결과를 검색합니다.
퀴즈 만들기