JavaTM Platform
Standard Ed. 6

java.util.concurrent
인터페이스 ExecutorService

모든 슈퍼 인터페이스:
Executor
기존의 서브 인터페이스의 일람:
ScheduledExecutorService
기존의 구현 클래스의 일람:
AbstractExecutorService , ScheduledThreadPoolExecutor , ThreadPoolExecutor


public interface ExecutorService
extends Executor

종료를 관리하는 메소드, 및 1 개(살) 이상의 비동기 태스크의 진행 상황을 추적하는 Future 를 생성할 수 있는 메소드를 제공하는 Executor 입니다.

ExecutorService 는, 신규 태스크를 거부하는 종료이 가능합니다. ExecutorService 를 종료하기 위한 2 개(살)이 다른 메소드가 제공되고 있습니다. shutdown() 메소드는 이전에 송신한 태스크를 종료전에 실행할 수가 있어shutdownNow() 메소드는 대기중의 태스크가 개시되지 않게 해, 현재 실행중의 태스크를 정지하려고 합니다. 종료시, executor 에는, 실행중의 액티브한 태스크나 실행을 대기중의 태스크는 존재하지 않고, 신규 태스크를 송신할 수도 있습니다. 미사용의 ExecutorService 는, 그 자원을 재생 가능하게 하려면 종료 되지 않으면 안됩니다.

submit 메소드는, 실행의 취소나 완료의 대기에 사용할 수 있는 Future 를 작성해 돌려주는 것으로, 기저 메소드 Executor.execute(java.lang.Runnable) 를 확장합니다. invokeAnyinvokeAll 메소드는, 가장 일반적으로 사용되는 방법으로 일괄 실행을 실시해, 태스크의 컬렉션을 실행해, 1 개(살) 이상 또는 모든 것이 완료하는 것을 대기합니다. ExecutorCompletionService 클래스를, 이러한 메소드의 커스터마이즈 된 변형의 기입에 사용할 수 있습니다.

Executors 클래스는, 이 패키지로 제공되는 executor 서비스용의 팩토리 메소드를 제공합니다.

사용예

다음에 나타내는 네트워크 서비스의 개략에서는, 요구가 착신하는 thread 풀 서비스내의 thread를 나타냅니다. 이것은, 구성 끝난 Executors.newFixedThreadPool(int) 팩토리 메소드를 사용합니다.
 class NetworkService implements Runnable {
   private final ServerSocket serverSocket;
   private final ExecutorService pool;

   public NetworkService(int port, int poolSize)
       throws IOException {
     serverSocket = new ServerSocket(port);
     pool = Executors.newFixedThreadPool(poolSize);
   }

   public void run() { // run the service
     try {
       for (;;) {
         pool.execute(new Handler(serverSocket.accept()));
       }
     } catch (IOException ex) {
       pool.shutdown();
     }
   }
 }

 class Handler implements Runnable {
   private final Socket socket;
   Handler(Socket socket) { this.socket = socket; }
   public void run() {
     // read and service request on socket
   }
 }
 
다음의 메소드는,ExecutorService 를 2 단계에서 종료 합니다. 최초로 shutdown 를 호출해 착신 태스크를 거부해, 다음에, 필요에 따라서 shutdownNow 를 호출해 중도의 태스크를 취소합니다.
 void shutdownAndAwaitTermination(ExecutorService pool) {
   pool.shutdown(); // Disable new tasks from being submitted
   try {
     // Wait a while for existing tasks to terminate
     if (! pool.awaitTermination(60, TimeUnit.SECONDS)) {
       pool.shutdownNow(); // Cancel currently executing tasks
       // Wait a while for tasks to respond to being cancelled
       if (! pool.awaitTermination(60, TimeUnit.SECONDS))
           System.err.println("Pool did not terminate");
     }
   } catch (InterruptedException ie) {
     // (Re-) Cancel if current thread also interrupted
     pool.shutdownNow();
     // Preserve interrupt status
     Thread.currentThread(). interrupt();
   }
 }
 

메모리 무결성 효과:Runnable 또는 Callable 태스크를 ExecutorService 에 송신하기 전의 thread내의 액션은, 그 태스크에 의해 행해지는 액션보다 happen-before 이며, 한편 그것은,Future.get() 에 의해 취득되는 결과보다 happen-before 입니다.

도입된 버젼:
1.5

메소드의 개요
 boolean awaitTermination (long timeout, TimeUnit  unit)
          종료 요구 후에 모든 태스크가 실행을 완료하고 있었는지, 타임 아웃이 발생하는지, 현재의 thread로 인터럽트가 발생하는지, 그 어느쪽이든가 최초로 발생할 때까지 블록 합니다.
<T> List <Future <T>>
invokeAll (Collection <? extends Callable <T>> tasks)
          지정된 태스크를 실행해, 모두 완료하면(자), 상태와 결과를 포함한 Future 의 리스트를 돌려줍니다.
<T> List <Future <T>>
invokeAll (Collection <? extends Callable <T>> tasks, long timeout, TimeUnit  unit)
          지정된 태스크를 실행해, 모든 것이 완료할까 마감 시간이 되는지, 그 어느쪽이든가 최초로 발생한 시점에서, 상태와 결과를 포함한 Future 의 리스트를 돌려줍니다.
<T> T
invokeAny (Collection <? extends Callable <T>> tasks)
          지정된 태스크를 실행해, 예외를 throw 하지 않고 정상적으로 완료한 태스크가 존재하는 경우는, 그 결과를 돌려줍니다.
<T> T
invokeAny (Collection <? extends Callable <T>> tasks, long timeout, TimeUnit  unit)
          지정된 태스크를 실행해, 타임 아웃이 경과하기 전에 예외를 throw 하지 않고 정상적으로 완료한 태스크가 존재하는 경우는, 그 결과를 돌려줍니다.
 boolean isShutdown ()
          이 executor 가 종료 하고 있었을 경우,true 를 돌려줍니다.
 boolean isTerminated ()
          종료에 이어 모든 태스크가 완료하고 있었을 경우,true 를 돌려줍니다.
 void shutdown ()
          순서 올바르게 종료을 개시합니다.
 List <Runnable > shutdownNow ()
          실행중의 액티브한 태스크 모든 정지를 시도해 대기중의 태스크의 처리를 정지해, 실행을 대기하고 있던 태스크의 리스트를 돌려줍니다.
<T> Future <T>
submit (Callable <T> task)
          값을 돌려주는 실행용 태스크를 송신해, 보류 상태의 태스크 결과를 나타내는 Future 를 돌려줍니다.
 Future <? > submit (Runnable  task)
          실행용의 Runnable 태스크를 송신해, 그 태스크를 나타내는 Future 를 돌려줍니다.
<T> Future <T>
submit (Runnable  task, T result)
          실행용의 Runnable 태스크를 송신해, 그 태스크를 나타내는 Future 를 돌려줍니다.
 
인터페이스 java.util.concurrent. Executor 로부터 상속된 메소드
execute
 

메소드의 상세

shutdown

void shutdown()
순서 올바르게 종료을 개시합니다. 이전에 송신된 태스크가 실행됩니다만, 신규 태스크는 받아들여지지 않습니다. 종료 후에 호출을 실행해도, 효과는 없습니다.

예외:
SecurityException - 시큐리티 매니저가 존재하는 상황으로 이 ExecutorService 의 종료을 실행하면(자), 호출 측에는 변경을 허가하지 않는 thread를 조작할 수 있는 경우. 이것은,RuntimePermission ("modifyThread") 를 보관 유지하지 않는지, 시큐리티 매니저의 checkAccess 메소드가 액세스를 거부하기 위해(때문에)이다.

shutdownNow

List <Runnable > shutdownNow()
실행중의 액티브한 태스크 모든 정지를 시도해 대기중의 태스크의 처리를 정지해, 실행을 대기하고 있던 태스크의 리스트를 돌려줍니다.

실행중의 액티브한 태스크 처리를 정지하기 위해서 최선의 노력을 하는 것 이상의 보증은 없습니다. 예를 들어, 일반적으로의 구현에서는 Thread.interrupt() 를 개입시켜 취소를 하기 (위해)때문에, 태스크가 인터럽트에 대한 응답에 실패하면(자), 태스크가 종료하지 않게 될 가능성이 있습니다.

반환값:
실행이 개시되지 않았던 태스크의 리스트
예외:
SecurityException - 시큐리티 매니저가 존재하는 상황으로 이 ExecutorService 의 종료을 실행하면(자), 호출 측에는 변경을 허가하지 않는 thread를 조작할 수 있는 경우. 이것은,RuntimePermission ("modifyThread") 를 보관 유지하지 않는지, 시큐리티 매니저의 checkAccess 메소드가 액세스를 거부하기 위해(때문에)이다.

isShutdown

boolean isShutdown()
이 executor 가 종료 하고 있었을 경우,true 를 돌려줍니다.

반환값:
이 executor 가 종료 하고 있었을 경우는 true

isTerminated

boolean isTerminated()
종료에 이어 모든 태스크가 완료하고 있었을 경우,true 를 돌려줍니다. shutdown 또는 shutdownNow 중 한쪽이 isTerminated 의 전에 불려 갔을 경우를 제외해,isTerminatedtrue 가 될 것은 없습니다.

반환값:
종료에 이어 모든 태스크가 완료하고 있었을 경우는 true

awaitTermination

boolean awaitTermination(long timeout,
                         TimeUnit  unit)
                         throws InterruptedException 
종료 요구 후에 모든 태스크가 실행을 완료하고 있었는지, 타임 아웃이 발생하는지, 현재의 thread로 인터럽트가 발생하는지, 그 어느쪽이든가 최초로 발생할 때까지 블록 합니다.

파라미터:
timeout - 대기하는 최장 시간
unit - timeout 인수의 시간 단위
반환값:
이 executor 가 종료되었을 경우는 true, 종료전에 타임 아웃이 경과했을 경우는 false
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우

submit

<T> Future <T> submit(Callable <T> task)
값을 돌려주는 실행용 태스크를 송신해, 보류 상태의 태스크 결과를 나타내는 Future 를 돌려줍니다. Future 의 get 메소드는, 정상적으로 완료한 시점에서 태스크의 결과를 돌려줍니다.

태스크의 대기를 즉시 블록 하는 경우는,result = exec.submit(aCallable). get(); 의 형식의 구축을 사용할 수 있습니다.

주:Executors 클래스에는, 크로 전기밥통을 닮은 다른 일반 객체를 변환할 수 있는 메소드 세트가 포함됩니다. 예를 들어,PrivilegedActionCallable 형식으로 변환해, 송신 가능하게 할 수가 있습니다.

파라미터:
task - 송신하는 태스크
반환값:
태스크의 보류 완료를 나타내는 Future
예외:
RejectedExecutionException - 태스크의 실행을 스케줄 할 수 없는 경우
NullPointerException - 태스크가 null 의 경우

submit

<T> Future <T> submit(Runnable  task,
                     T result)
실행용의 Runnable 태스크를 송신해, 그 태스크를 나타내는 Future 를 돌려줍니다. Future 의 get 메소드는, 정상적으로 완료한 시점에서 지정된 결과를 돌려줍니다.

파라미터:
task - 송신하는 태스크
result - 돌려주는 결과
반환값:
태스크의 보류 완료를 나타내는 Future
예외:
RejectedExecutionException - 태스크의 실행을 스케줄 할 수 없는 경우
NullPointerException - 태스크가 null 의 경우

submit

Future <? > submit(Runnable  task)
실행용의 Runnable 태스크를 송신해, 그 태스크를 나타내는 Future 를 돌려줍니다. Future 의 get 메소드는, 정상적으로 완료한 시점에서 null 를 돌려줍니다.

파라미터:
task - 송신하는 태스크
반환값:
태스크의 보류 완료를 나타내는 Future
예외:
RejectedExecutionException - 태스크의 실행을 스케줄 할 수 없는 경우
NullPointerException - 태스크가 null 의 경우

invokeAll

<T> List <Future <T>> invokeAll(Collection <?  extends Callable <T>> tasks)
                          throws InterruptedException 
지정된 태스크를 실행해, 모두 완료하면(자), 상태와 결과를 포함한 Future 의 리스트를 돌려줍니다. 반환되는 리스트의 각 요소에 대해서 Future.isDone()true 가 됩니다. 「완료했다」태스크는, 일반적으로 대로나 예외를 throw 하는 것으로 종료하고 있습니다. 오퍼레이션의 진행중에, 지정된 컬렉션이 변경되었을 경우, 이 메소드의 결과는 정의되고 있지 않습니다.

파라미터:
tasks - 태스크의 컬렉션
반환값:
태스크를 나타내는 Future 의 리스트. 리스트의 순서는, 지정된 태스크 리스트의 반복자에 의해 생성되는 순서와 같고, 각 태스크는 완료필이다.
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우. 이 경우, 미완료의 태스크는 삭제된다.
NullPointerException - 태스크 또는 그 몇개의 요소가 null 의 경우
RejectedExecutionException - 몇개의 태스크의 실행을 스케줄 할 수 없는 경우

invokeAll

<T> List <Future <T>> invokeAll(Collection <?  extends Callable <T>> tasks,
                              long timeout,
                              TimeUnit  unit)
                          throws InterruptedException 
지정된 태스크를 실행해, 모든 것이 완료할까 마감 시간이 되는지, 그 어느쪽이든가 최초로 발생한 시점에서, 상태와 결과를 포함한 Future 의 리스트를 돌려줍니다. 반환되는 리스트의 각 요소에 대해서 Future.isDone()true 가 됩니다. 반환된 시점에서, 완료하고 있지 않는 태스크는 삭제됩니다. 「완료했다」태스크는, 일반적으로 대로나 예외를 throw 하는 것으로 종료하고 있습니다. 오퍼레이션의 진행중에, 지정된 컬렉션이 변경되었을 경우, 이 메소드의 결과는 정의되고 있지 않습니다.

파라미터:
tasks - 태스크의 컬렉션
timeout - 대기하는 최장 시간
unit - timeout 인수의 시간 단위
반환값:
태스크를 나타내는 Future 의 리스트. 리스트의 순서는, 지정된 태스크 리스트의 반복자에 의해 생성되는 순서와 같게 된다. 오퍼레이션이 타임 아웃이 되지 않았던 경우, 각 태스크는 완료한다. 오퍼레이션이 타임 아웃이 되었을 경우, 태스크의 일부는 완료하지 않는다.
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우. 이 경우, 미완료의 태스크는 삭제된다
NullPointerException - 태스크, 그 요소의 언젠가, 또는 단위가 null 의 경우
RejectedExecutionException - 몇개의 태스크의 실행을 스케줄 할 수 없는 경우

invokeAny

<T> T invokeAny(Collection <?  extends Callable <T>> tasks)
            throws InterruptedException ,
                   ExecutionException 
지정된 태스크를 실행해, 예외를 throw 하지 않고 정상적으로 완료한 태스크가 존재하는 경우는, 그 결과를 돌려줍니다. 정상적으로 돌아온 시점, 또는 예외가 반환된 시점에서, 완료하고 있지 않는 태스크는 삭제됩니다. 오퍼레이션의 진행중에, 지정된 컬렉션이 변경되었을 경우, 이 메소드의 결과는 정의되고 있지 않습니다.

파라미터:
tasks - 태스크의 컬렉션
반환값:
태스크의 어느 쪽인가에 따라 반환되는 결과
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우
NullPointerException - 태스크 또는 그 몇개의 요소가 null 의 경우
IllegalArgumentException - 태스크가 빈 상태(empty)의 경우
ExecutionException - 정상적으로 완료한 태스크가 없는 경우
RejectedExecutionException - 태스크의 실행을 스케줄 할 수 없는 경우

invokeAny

<T> T invokeAny(Collection <?  extends Callable <T>> tasks,
                long timeout,
                TimeUnit  unit)
            throws InterruptedException ,
                   ExecutionException ,
                   TimeoutException 
지정된 태스크를 실행해, 타임 아웃이 경과하기 전에 예외를 throw 하지 않고 정상적으로 완료한 태스크가 존재하는 경우는, 그 결과를 돌려줍니다. 정상적으로 돌아온 시점, 또는 예외가 반환된 시점에서, 완료하고 있지 않는 태스크는 삭제됩니다. 오퍼레이션의 진행중에, 지정된 컬렉션이 변경되었을 경우, 이 메소드의 결과는 정의되고 있지 않습니다.

파라미터:
tasks - 태스크의 컬렉션
timeout - 대기하는 최장 시간
unit - timeout 인수의 시간 단위
반환값:
태스크의 어느 쪽인가에 따라 반환되는 결과.
예외:
InterruptedException - 대기중에 인터럽트가 발생했을 경우
NullPointerException - 태스크, 그 요소의 언젠가, 또는 단위가 null 의 경우
TimeoutException - 태스크가 정상적으로 완료하기 전에, 지정된 타임 아웃이 경과했을 경우
ExecutionException - 정상적으로 완료한 태스크가 없는 경우
RejectedExecutionException - 태스크의 실행을 스케줄 할 수 없는 경우

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 도 참조해 주세요.