JavaTM Platform
Standard Ed. 6

java.util.concurrent
인터페이스 Future<V>

형태 파라미터:
V - 이 Future 의 get 메소드로 반환되는 결과형
기존의 서브 인터페이스의 일람:
Response <T>, RunnableFuture <V>, RunnableScheduledFuture <V>, ScheduledFuture <V>
기존의 구현 클래스의 일람:
FutureTask , SwingWorker


public interface Future<V>

Future 는, 비동기 계산의 결과를 나타냅니다. 계산이 완료했는지 어떠했는지의 체크, 완료까지의 대기, 계산 결과의 취득등을 행하기 위한 메소드가 준비되어 있습니다. 결과는, 계산의 완료시에 get 메소드를 사용해 취득할 필요가 있어, 필요에 따라서 준비를 할 수 있을 때까지 블록 합니다. 취소를 실행하려면 ,cancel 메소드를 사용합니다. 태스크가 정상적으로 완료했는지 삭제되었는지를 판단하기 위한 추가 메소드도 있습니다. 계산이 완료하면(자), 그 계산을 취소할 수 없습니다. 이용 가능한 결과를 얻기 위해서가 아니고, 취소 기능으로서 Future 를 사용하는 경우는,Future<? > 라고 하는 형식의 형태를 선언해, 기본이 되는 태스크의 결과로서 null 를 돌려주도록(듯이) 할 수도 있습니다.

사용예 (다음의 클래스는 모두 가공의 것입니다. )

 interface ArchiveSearcher { String search(String target); }
 class App {
   ExecutorService executor = ...
   ArchiveSearcher searcher = ...
   void showSearch(final String target)
       throws InterruptedException {
     Future<String> future
       = executor.submit(new Callable<String>() {
         public String call() {
             return searcher.search(target);
         }});
     displayOtherThings(); // do other things while searching
     try {
       displayText(future.get()); // use future
     } catch (ExecutionException ex) { cleanup(); return; }
   }
 }
 
FutureTask 클래스는,Runnable 를 구현하는 Future 의 구현이며, 그 때문에 Executor 에 의해 실행되는 일이 있습니다. 예를 들어,submit 를 사용한 전술의 구축은, 다음과 같이 옮겨놓을 수 있습니다.
     FutureTask<String> future =
       new FutureTask<String>(new Callable<String>() {
         public String call() {
           return searcher.search(target);
       }});
     executor.execute(future);
 

메모리 무결성 효과:비동기 계산으로 발생하는 액션은, 다른 thread로 대응하는 Future.get() 에 계속되는 액션의「전에 발생」합니다.

도입된 버젼:
1.5
관련 항목:
FutureTask , Executor

메소드의 개요
 boolean cancel (boolean mayInterruptIfRunning)
          이 태스크의 실행의 취소를 시도합니다.
 V get ()
          필요에 따라서 계산이 완료할 때까지 대기해, 그 후, 계산 결과를 가져옵니다.
 V get (long timeout, TimeUnit  unit)
          필요에 따라서, 최대로 지정된 시간, 계산이 완료할 때까지 대기해, 그 후, 계산 결과가 이용 가능한 경우는 결과를 가져옵니다.
 boolean isCancelled ()
          이 태스크가 정상적으로 완료하기 전에 삭제되었을 경우는 true 를 돌려줍니다.
 boolean isDone ()
          이 태스크가 완료했을 경우는 true 를 돌려줍니다.
 

메소드의 상세

cancel

boolean cancel(boolean mayInterruptIfRunning)
이 태스크의 실행의 취소를 시도합니다. 태스크가 벌써 완료하고 있었을 경우, 벌써 삭제되고 있었을 경우, 또는 그 외의 이유로써 취소할 수 없었던 경우, 이 시도는 실패합니다. 그 시도가 성공해,cancel 의 호출시에 이 태스크가 기동하지 않았던 경우, 이 태스크가 실행될 것은 없습니다. 태스크가 기동 끝난 경우는, 이 태스크의 정지를 시도할 때, 이 태스크를 실행하고 있는 thread에 끼어들 필요가 있을지 어떨지는,mayInterruptIfRunning 파라미터로 판단합니다.

이 메소드가 복귀한 뒤, 이후의 isDone() 의 호출에서는 항상 true 가 돌려주어집니다. 이 메소드가 true 를 돌려주었을 경우, 이후의 isCancelled() 의 호출에서는 항상 true 가 돌려주어집니다.

파라미터:
mayInterruptIfRunning - 이 태스크를 실행하고 있는 thread에 끼어들 필요가 있는 경우는 true, 그렇지 않은 경우는, 실행중의 태스크를 완료할 수 있다
반환값:
태스크를 취소할 수 없었던 경우는 false (일반적으로은 태스크가 벌써 정상적으로 완료하고 있었기 때문에), 그렇지 않은 경우는 true

isCancelled

boolean isCancelled()
이 태스크가 정상적으로 완료하기 전에 삭제되었을 경우는 true 를 돌려줍니다.

반환값:
이 태스크가 완료하기 전에 삭제되었을 경우는 true

isDone

boolean isDone()
이 태스크가 완료했을 경우는 true 를 돌려줍니다. 완료의 이유는, 정상 종료, 예외, 취소등이 있습니다만, 어느 경우도 이 메소드는 true 를 돌려줍니다.

반환값:
이 태스크가 완료했을 경우는 true

get

V  get()
      throws InterruptedException ,
             ExecutionException 
필요에 따라서 계산이 완료할 때까지 대기해, 그 후, 계산 결과를 가져옵니다.

반환값:
계산 결과
예외:
CancellationException - 계산이 삭제되었을 경우
ExecutionException - 계산으로 예외가 throw 되었을 경우
InterruptedException - 대기중에 현재의 thread로 인터럽트가 발생했을 경우

get

V  get(long timeout,
      TimeUnit  unit)
      throws InterruptedException ,
             ExecutionException ,
             TimeoutException 
필요에 따라서, 최대로 지정된 시간, 계산이 완료할 때까지 대기해, 그 후, 계산 결과가 이용 가능한 경우는 결과를 가져옵니다.

파라미터:
timeout - 대기하는 최장 시간
unit - timeout 인수의 시간 단위
반환값:
계산 결과
예외:
CancellationException - 계산이 삭제되었을 경우
ExecutionException - 계산으로 예외가 throw 되었을 경우
InterruptedException - 대기중에 현재의 thread로 인터럽트가 발생했을 경우
TimeoutException - 대기가 타임 아웃이 되었을 경우

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.