본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] Executor : Java Concurrency API

by 돼지왕 왕돼지 2017. 3. 8.
반응형

 [Java] Executor : Java Concurrency API 


awaittermination, best-effort attemp, callable, callble, cancel, collection, concurrency, concurrency api, exception, execute, executor, executor interface, executor service interface, executor utility, executor utility class, executorservice, Future, Future interface, Get, Interface, INTERRUPT, invokeall, invokeany, iscancelled, isdone, isshutdown, isterminated, Java, list, mayinterruptifrunning, newcachedthreadpool, newfixedthreadpool, newscheduledthreadpool, newsinglethreadexecutor, newsinglethreadscheduleexecutor, Operation, Return, Runnable, scheduledexecutorservice, shutdown, shutdownnow, SUBMIT, thread, timeout, timeoutexception, timeunit, True, [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()





반응형

댓글