[Java] Executor : Java Concurrency API |
-
Executor Interface
제공된 Runnable 을 실행하는 객체가 구현해야 할 인터페이스.
execute( Runnable ) 을 구현해야 한다.
public interface Executor {
void execute(Runnable command);
}
-
ExecutorService interface
Executor 의 라이프 사이클을 관리할 수 있는 기능을 제공한다.
추가로 Runnable 뿐만 아니라 Callable 도 작업할 수 있다.
void shutdown()
이미 Executor 에 제공된 작업은 실행되지만, 새로운 작업은 수용하지 않는다.
List<Runnable> shutdownNow()
현재 실행중인 모든 작업을 중지시키고, 대기중인 작업을 멈추고 대기중인 작업 목록을 리턴한다.
shutDownNow 는 Thread.interrupt() 를 통해 best-effort attempt 를 하기 때문에 즉각 종료를 보장하지 못한다.
boolean isShutdown()
boolean isTerminated()
boolean awaitTermination( long timeout, TimeUnit unit )
셧다운 실행한 뒤, 지정한 시간 동안 모든 작업이 종료될 때까지 대기.
지정한 시간 이내 실행중인 모든 작업이 종료되면 true 를 return 하고, 아직 실행중인 작업이 남아 있으면 false 를 리턴.
<T> Future<T> submit( Callable<T> task )
return 되는 Future 에 get() 을 호출하여 Callable 의 return 값을 받을 수 있다.
Future<?> submit( Runnable task )
<T> Future<T> submit( Runnable task, T result )
<T> List<Future<T>> invokeAll( Collection<? extends Callable<T>> tasks )
return 된 list 에 들어있는 Future 의 isDone() 함수는 모두 true 이다.
정상적으로 수행을 완료한 경우와 exception 으로 수행을 완료한 경우 모두 포함된다.
operation 수행 중 전달하는 collection 이 변경될 경우 오동작 할 수 있다.
<T> List<Future<T>> invokeAll( Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit )
기본 invokeAll 과 동일하지만, 지정 시간 동안 완료되지 못한 작업은 취소된다.
<T> T invokeAny( Collection<? extends Callable<T>> tasks )
작업을 수행하고, 작업 결과 중 성공적으로 완료된 것 중 하나의 결과를 리턴한다. 어떤 녀석이 return 될지는 모른다.
예외가 발생하던 정상적으로 종료하던 하나라도 수행을 완료할 경우, 나머지 완료되지 않은 작업은 취소된다.
invokeAll 과 마찬가지로 수행 중 전달하는 collection 이 변경될 경우 오동작 할 수 있다.
<T> T invokeAny( Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit )
기본 invokeAny 와 동일하지만 지정한 시간 동안만 대기한다
-
ScheduledExecutorService
스케쥴링 할 수 있는 기능 추가.
이 녀석은 내용이 복잡하니 알아서 찾아서 공부하시길.. ㅎㅎ
-
Executors 유틸리티 클래스
ExecutorService newFixedThreadPool( int nThreads )
ScheduledExecutorService newScheduledThreadPool( int corePoolSize )
ExecutorService newSingleThreadExecutor()
ScheduledExecutorService newSingleThreadScheduleExecutor()
ExecutorService newCachedThreadPool()
-
Future Interface
V get()
Callable 등 작업의 실행이 완료될 때까지 블로킹 되며, 완료되면 그 결과값을 리턴한다.
V get(long timeout, TimeUnit unit)
지정한 시간 동안 작업의 실행결과를 기다린다.
대기 시간이 초과되면 TimeoutException 이 발생한다.
boolean cancel(boolean mayInterruptIfRunning)
boolean isCancelled()
boolean isDone()
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android] Overview screen 을 꾸며보세요. (0) | 2017.04.11 |
---|---|
[Android] Material Design 개략적으로 알아보기~ (0) | 2017.04.10 |
[Java] What is "CopyOnWriteArrayList" (0) | 2017.02.22 |
[android] ListVIew 의 transcriptMode.. ( 추가된 item 으로 focus 이동 ) (0) | 2016.12.22 |
[Java] Unbounded Wildcards (0) | 2016.11.23 |
댓글