6.1 실행 가능한 개체
그래서 우리는 패키지의 가장 큰 부분에 도달했습니다. Future 및 Callable 인터페이스를 통해 결과를 얻을 수 있는 기능과 함께 비동기 작업을 실행하기 위한 인터페이스와 ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool과 같은 스레드 풀을 생성하기 위한 서비스 및 팩토리에 대해 설명합니다.
더 나은 이해를 위해 인터페이스와 클래스를 약간 분해해 보겠습니다.

6.2 실행 가능한 개체의 실현
Future<V>
비동기 작업의 결과를 얻기 위한 훌륭한 인터페이스입니다. 여기서 핵심 메서드는 다른 스레드의 비동기 작업이 완료될 때까지 현재 스레드(시간 초과 여부에 관계없이)를 차단하는 get 메서드입니다. 작업을 취소하고 현재 상태를 확인하는 추가 방법도 있습니다. FutureTask 클래스는 종종 구현으로 사용됩니다.
RunnableFuture<V>
- Future가 클라이언트 API에 대한 인터페이스인 경우 RunnableFuture 인터페이스는 이미 비동기 부분을 시작하는 데 사용됩니다. run() 메서드를 성공적으로 완료하면 비동기 작업이 종료되고 get 메서드를 통해 결과를 검색할 수 있습니다.
Callable<V>
- 비동기 작업을 위한 Runnable 인터페이스의 확장된 아날로그입니다. 입력된 값을 반환하고 확인된 예외를 throw할 수 있습니다. 이 인터페이스에는 run() 메서드가 없지만 많은 java.util.concurrent 클래스가 Runnable과 함께 이를 지원합니다.
FutureTask<V>
— Future/RunnableFuture 인터페이스 구현. 비동기 작업은 Runnable 또는 Callable 개체의 형태로 생성자 중 하나에 대한 입력으로 사용됩니다. FutureTask 클래스 자체는 예를 들어 new Thread(task).start() 또는 ThreadPoolExecutor를 통해 작업자 스레드에서 시작되도록 설계되었습니다. 비동기 작업의 결과는 get(...) 메서드를 통해 검색됩니다.
Delayed
- 미래에 시작해야 하는 비동기 작업과 DelayQueue에서 사용됩니다. 비동기 작업 시작 전 시간을 설정할 수 있습니다.
ScheduledFuture<V>
- Future 및 Delayed 인터페이스를 결합한 마커 인터페이스.
RunnableScheduledFuture<V>
- RunnableFuture와 ScheduledFuture를 결합한 인터페이스. 또한 작업이 일회성 작업인지 또는 지정된 빈도로 실행되어야 하는지 여부를 지정할 수 있습니다.
GO TO FULL VERSION