[자바 및 하 도 급 학습 1] Executor 와 Executor Service

9034 단어 자바병발 하 다
본 고 는 jdk 8 과 가방 에 있 는 Executor/Executor Service 라 는 두 인 터 페 이 스 를 소개 합 니 다.
실행 자 인터페이스
개술
이 종 류 는 작업 을 제출 하 는 방법 을 제공 합 니 다. 제출 한 작업 은 제출 프로그램의 이 스 레 드 에서 실 행 될 수도 있 고 서로 다른 스 레 드 에서 실 행 될 수도 있 습 니 다. 하나의 스 레 드 탱크 에서 실 행 될 수도 있 습 니 다. 어떻게 사용 하 는 지 보 세 요.
However, the {@code Executor} interface does not strictly require that execution be asynchronous. In the simplest case, an executor can run the submitted task immediately in the caller’s thread
그러나 이 인 터 페 이 스 는 제출 한 임 무 를 비동기 로 수행 하도록 엄 격 히 규정 하지 않 았 습 니 다. 가장 간단 한 경우 제출 한 임 무 는 작업 의 caller thread 에서 직접 수행 할 수 있 습 니 다.
More typically, tasks are executed in some thread other than the caller 's thread.
execute 방법
이 인 터 페 이 스 는 방법 을 제공 합 니 다:
1
void execute(Runnable command);

이 방법의 역할 은 임 무 를 제출 하 는 것 입 니 다. 이 임 무 는 미래의 어느 순간 에 실 행 될 것 입 니 다. 이 임 무 는 새로운 스 레 드 에 의 해 실 행 될 수도 있 고 스 레 드 탱크 의 스 레 드 에 의 해 실 행 될 수도 있 으 며 제출 자 자체 의 스 레 드 에 의 해 실 행 될 수도 있 습 니 다.
ExecutorService 인터페이스
개술
Executor Service 는 Executor 에 계승 되 어 임 무 를 수행, 취소, 끝 낼 수 있 는 방법 을 제공 합 니 다.
shutdown 방법
1
void shutdown();

shutdown 방법 이 호출 된 후 즉시 새로운 작업 을 받 지 않 지만, 이전에 제출 한 작업 은 계속 실 행 됩 니 다.
shutdown Now 방법
1
List<Runnable> shutdownNow();

이 함수 가 호출 되면 즉시 새로운 작업 을 받 지 않 고 현재 실행 중인 작업 을 끝 내 려 고 시도 합 니 다. 모든 작업 이 끝 날 때 까지 기다 리 는 작업 의 목록 을 되 돌려 줍 니 다.
isShutdown 방법
1
boolean isShutdown();

이 함 수 는 service 가 shutdown 에 있 는 지 여 부 를 판단 합 니 다. shutdown 함 수 를 호출 하면 true 로 돌아 갑 니 다. 그렇지 않 으 면 false 로 돌아 갑 니 다.
isTerminated 방법
1
boolean isTerminated();

이 함 수 는 service 에서 모든 작업 이 완료 되 었 는 지 판단 하고 주의해 야 할 것 은 shutdown 함수 나 shutdown Now 함 수 를 호출 하지 않 았 다 면 이 함수 의 반환 값 은 true 일 수 없습니다.
await Termination 방법
1
2
boolean awaitTermination(long timeout, TimeUnit unit)
 throws InterruptedException;

이 함 수 는 모든 작업 이 실행 되 거나 대기 시간 이 될 때 까지 계속 막 힙 니 다.
submit 방법
1
2
3
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);

이 함수 들 은 모두 service 에 작업 을 제출 하고 Futrue 대상 을 되 돌려 작업 의 수행 상황 을 추적 하 는 데 사 용 됩 니 다.첫 번 째 함 수 는 작업 이 끝 난 후에 Futrue. get () 은 작업 이 실 행 된 결 과 를 되 돌려 주 고, 두 번 째 함 수 는 작업 이 끝 난 후에 Future. get () 은 주어진 result 결 과 를 되 돌려 주 며, 세 번 째 함 수 는 작업 이 끝 난 후에 Future. get () 은 null 로 돌아 갑 니 다.
invoke All 방법
1
2
3
4
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException;

<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,long timeout, TimeUnit unit)
throws InterruptedException;

이 방법 들 은 퀘 스 트 목록 에 있 는 모든 퀘 스 트 를 수행 하고 모든 퀘 스 트 에 대응 하 는 Futue 를 되 돌려 주 는 것 이 이해 하기 쉽다.즉, 임무 가 서로 영향 을 주지 않 고 future 를 통 해 모든 임무 의 수행 상황 을 추적 할 수 있다. 예 를 들 어 취소 되 었 는 지, 정상적으로 완 성 됐 는 지, 이상 하 게 완 성 됐 는 지 등 은 주로 Future 류 가 제공 하 는 API 를 사용한다.invoke All 은 작업 목록 의 모든 작업 이 완 료 될 때 까지 기다 리 는 차단 방법 입 니 다.작업 이 정상적으로 완료 되 든 이상 종료 되 든 Future. isDone () 은 항상 true 로 돌아 갑 니 다.Future. is Canceled () 를 통 해 작업 이 실행 중 취 소 됐 는 지 여 부 를 판단 할 수 있 습 니 다.Future. get () 을 통 해 작업 의 반환 결 과 를 얻 거나 작업 수행 중 에 던 진 이상 을 얻 을 수 있 습 니 다.
invokeany 방법
1
2
3
4
5
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
 throws InterruptedException, ExecutionException;

<T> T invokeAny(Collection<? extends Callable<T>> tasks,  long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;

위의 함수 가 주어진 일련의 작업 을 수행 합 니 다. 어떤 작업 이 성공 적 으로 실 행 될 때 (이상 을 던 지지 않 았 습 니 다) 이 작업 에 대응 하 는 Future 대상 을 되 돌려 주 고 실행 되 지 않 은 모든 작업 이 취 소 됩 니 다.실행 과정 에서 tasks 목록 을 수정 하면 되 돌아 오 는 결 과 는 확실 하지 않 습 니 다.두 번 째 함 수 는 시간 초과 가 있 습 니 다.그 밖 에 주의해 야 한다.
1 개의 작업 이 정상적으로 완료 되면 (실행 과정 에서 이상 을 던 지지 않 음) 스 레 드 탱크 는 > 기타 미 완성 작업 을 종료 합 니 다.
제출 한 퀘 스 트 목록 에 정상적으로 완 료 된 퀘 스 트 가 1 개 없 으 면 invokeany 를 호출 하면 이상 을 던 집 니 다. 어떤 퀘 스 트 의 이상 을 던 졌 는 지 는 중요 하지 않 습 니 다 invokeany () 는 작업 의 제출 순서 와 상 관 없 이 최초 로 정상적으로 수행 한 작업 을 되 돌려 줍 니 다.
만약 시간 을 초과 하기 전에 모든 임무 가 이상 하 게 중지 되 었 다 면 더 이상 기다 릴 필요 가 없다.시간 을 초과 한 후에 도 실행 중이 거나 실행 을 기다 리 는 작업 이 있다 면 TimeoutException 을 던 집 니 다.

좋은 웹페이지 즐겨찾기