|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
public interface ExecutorService
종료를 관리하는 메소드, 및 1 개(살) 이상의 비동기 태스크의 진행 상황을 추적하는 Future
를 생성할 수 있는 메소드를 제공하는 Executor
입니다.
ExecutorService 는, 신규 태스크를 거부하는 종료이 가능합니다. ExecutorService 를 종료하기 위한 2 개(살)이 다른 메소드가 제공되고 있습니다. shutdown()
메소드는 이전에 송신한 태스크를 종료전에 실행할 수가 있어shutdownNow()
메소드는 대기중의 태스크가 개시되지 않게 해, 현재 실행중의 태스크를 정지하려고 합니다. 종료시, executor 에는, 실행중의 액티브한 태스크나 실행을 대기중의 태스크는 존재하지 않고, 신규 태스크를 송신할 수도 있습니다. 미사용의 ExecutorService 는, 그 자원을 재생 가능하게 하려면 종료 되지 않으면 안됩니다.
submit 메소드는, 실행의 취소나 완료의 대기에 사용할 수 있는 Future
를 작성해 돌려주는 것으로, 기저 메소드 Executor.execute(java.lang.Runnable)
를 확장합니다. invokeAny 및 invokeAll 메소드는, 가장 일반적으로 사용되는 방법으로 일괄 실행을 실시해, 태스크의 컬렉션을 실행해, 1 개(살) 이상 또는 모든 것이 완료하는 것을 대기합니다. ExecutorCompletionService
클래스를, 이러한 메소드의 커스터마이즈 된 변형의 기입에 사용할 수 있습니다.
Executors
클래스는, 이 패키지로 제공되는 executor 서비스용의 팩토리 메소드를 제공합니다.
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 입니다.
메소드의 개요 | ||
---|---|---|
boolean |
awaitTermination (long timeout,
TimeUnit unit)
종료 요구 후에 모든 태스크가 실행을 완료하고 있었는지, 타임 아웃이 발생하는지, 현재의 thread로 인터럽트가 발생하는지, 그 어느쪽이든가 최초로 발생할 때까지 블록 합니다. |
|
|
invokeAll (Collection <? extends Callable <T>> tasks)
지정된 태스크를 실행해, 모두 완료하면(자), 상태와 결과를 포함한 Future 의 리스트를 돌려줍니다. |
|
|
invokeAll (Collection <? extends Callable <T>> tasks,
long timeout,
TimeUnit unit)
지정된 태스크를 실행해, 모든 것이 완료할까 마감 시간이 되는지, 그 어느쪽이든가 최초로 발생한 시점에서, 상태와 결과를 포함한 Future 의 리스트를 돌려줍니다. |
|
|
invokeAny (Collection <? extends Callable <T>> tasks)
지정된 태스크를 실행해, 예외를 throw 하지 않고 정상적으로 완료한 태스크가 존재하는 경우는, 그 결과를 돌려줍니다. |
|
|
invokeAny (Collection <? extends Callable <T>> tasks,
long timeout,
TimeUnit unit)
지정된 태스크를 실행해, 타임 아웃이 경과하기 전에 예외를 throw 하지 않고 정상적으로 완료한 태스크가 존재하는 경우는, 그 결과를 돌려줍니다. |
|
boolean |
isShutdown ()
이 executor 가 종료 하고 있었을 경우,true 를 돌려줍니다. |
|
boolean |
isTerminated ()
종료에 이어 모든 태스크가 완료하고 있었을 경우,true 를 돌려줍니다. |
|
void |
shutdown ()
순서 올바르게 종료을 개시합니다. |
|
List <Runnable > |
shutdownNow ()
실행중의 액티브한 태스크 모든 정지를 시도해 대기중의 태스크의 처리를 정지해, 실행을 대기하고 있던 태스크의 리스트를 돌려줍니다. |
|
|
submit (Callable <T> task)
값을 돌려주는 실행용 태스크를 송신해, 보류 상태의 태스크 결과를 나타내는 Future 를 돌려줍니다. |
|
Future <? > |
submit (Runnable task)
실행용의 Runnable 태스크를 송신해, 그 태스크를 나타내는 Future 를 돌려줍니다. |
|
|
submit (Runnable task,
T result)
실행용의 Runnable 태스크를 송신해, 그 태스크를 나타내는 Future 를 돌려줍니다. |
인터페이스 java.util.concurrent. Executor 로부터 상속된 메소드 |
---|
execute |
메소드의 상세 |
---|
void shutdown()
SecurityException
- 시큐리티 매니저가 존재하는 상황으로 이 ExecutorService 의 종료을 실행하면(자), 호출 측에는 변경을 허가하지 않는 thread를 조작할 수 있는 경우. 이것은,RuntimePermission
("modifyThread") 를 보관 유지하지 않는지, 시큐리티 매니저의 checkAccess 메소드가 액세스를 거부하기 위해(때문에)이다. List <Runnable > shutdownNow()
실행중의 액티브한 태스크 처리를 정지하기 위해서 최선의 노력을 하는 것 이상의 보증은 없습니다. 예를 들어, 일반적으로의 구현에서는 Thread.interrupt()
를 개입시켜 취소를 하기 (위해)때문에, 태스크가 인터럽트에 대한 응답에 실패하면(자), 태스크가 종료하지 않게 될 가능성이 있습니다.
SecurityException
- 시큐리티 매니저가 존재하는 상황으로 이 ExecutorService 의 종료을 실행하면(자), 호출 측에는 변경을 허가하지 않는 thread를 조작할 수 있는 경우. 이것은,RuntimePermission
("modifyThread") 를 보관 유지하지 않는지, 시큐리티 매니저의 checkAccess 메소드가 액세스를 거부하기 위해(때문에)이다. boolean isShutdown()
boolean isTerminated()
boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
timeout
- 대기하는 최장 시간unit
- timeout 인수의 시간 단위
InterruptedException
- 대기중에 인터럽트가 발생했을 경우<T> Future <T> submit(Callable <T> task)
태스크의 대기를 즉시 블록 하는 경우는,result = exec.submit(aCallable). get(); 의 형식의 구축을 사용할 수 있습니다.
주:Executors
클래스에는, 크로 전기밥통을 닮은 다른 일반 객체를 변환할 수 있는 메소드 세트가 포함됩니다. 예를 들어,PrivilegedAction
를 Callable
형식으로 변환해, 송신 가능하게 할 수가 있습니다.
task
- 송신하는 태스크
RejectedExecutionException
- 태스크의 실행을 스케줄 할 수 없는 경우
NullPointerException
- 태스크가 null 의 경우<T> Future <T> submit(Runnable task, T result)
task
- 송신하는 태스크result
- 돌려주는 결과
RejectedExecutionException
- 태스크의 실행을 스케줄 할 수 없는 경우
NullPointerException
- 태스크가 null 의 경우Future <? > submit(Runnable task)
task
- 송신하는 태스크
RejectedExecutionException
- 태스크의 실행을 스케줄 할 수 없는 경우
NullPointerException
- 태스크가 null 의 경우<T> List <Future <T>> invokeAll(Collection <? extends Callable <T>> tasks) throws InterruptedException
Future.isDone()
는 true 가 됩니다. 「완료했다」태스크는, 일반적으로 대로나 예외를 throw 하는 것으로 종료하고 있습니다. 오퍼레이션의 진행중에, 지정된 컬렉션이 변경되었을 경우, 이 메소드의 결과는 정의되고 있지 않습니다.
tasks
- 태스크의 컬렉션
InterruptedException
- 대기중에 인터럽트가 발생했을 경우. 이 경우, 미완료의 태스크는 삭제된다.
NullPointerException
- 태스크 또는 그 몇개의 요소가 null 의 경우
RejectedExecutionException
- 몇개의 태스크의 실행을 스케줄 할 수 없는 경우<T> List <Future <T>> invokeAll(Collection <? extends Callable <T>> tasks, long timeout, TimeUnit unit) throws InterruptedException
Future.isDone()
는 true 가 됩니다. 반환된 시점에서, 완료하고 있지 않는 태스크는 삭제됩니다. 「완료했다」태스크는, 일반적으로 대로나 예외를 throw 하는 것으로 종료하고 있습니다. 오퍼레이션의 진행중에, 지정된 컬렉션이 변경되었을 경우, 이 메소드의 결과는 정의되고 있지 않습니다.
tasks
- 태스크의 컬렉션timeout
- 대기하는 최장 시간unit
- timeout 인수의 시간 단위
InterruptedException
- 대기중에 인터럽트가 발생했을 경우. 이 경우, 미완료의 태스크는 삭제된다
NullPointerException
- 태스크, 그 요소의 언젠가, 또는 단위가 null 의 경우
RejectedExecutionException
- 몇개의 태스크의 실행을 스케줄 할 수 없는 경우<T> T invokeAny(Collection <? extends Callable <T>> tasks) throws InterruptedException , ExecutionException
tasks
- 태스크의 컬렉션
InterruptedException
- 대기중에 인터럽트가 발생했을 경우
NullPointerException
- 태스크 또는 그 몇개의 요소가 null 의 경우
IllegalArgumentException
- 태스크가 빈 상태(empty)의 경우
ExecutionException
- 정상적으로 완료한 태스크가 없는 경우
RejectedExecutionException
- 태스크의 실행을 스케줄 할 수 없는 경우<T> T invokeAny(Collection <? extends Callable <T>> tasks, long timeout, TimeUnit unit) throws InterruptedException , ExecutionException , TimeoutException
tasks
- 태스크의 컬렉션timeout
- 대기하는 최장 시간unit
- timeout 인수의 시간 단위
InterruptedException
- 대기중에 인터럽트가 발생했을 경우
NullPointerException
- 태스크, 그 요소의 언젠가, 또는 단위가 null 의 경우
TimeoutException
- 태스크가 정상적으로 완료하기 전에, 지정된 타임 아웃이 경과했을 경우
ExecutionException
- 정상적으로 완료한 태스크가 없는 경우
RejectedExecutionException
- 태스크의 실행을 스케줄 할 수 없는 경우
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.