집행자
Executor 는 Runnable 태스크 의 시작을 구현하는 클래스의 기본 인터페이스입니다. 이것은 작업 추가 및 시작 방법에 대한 지원을 제공합니다.
ExecutorService 는 Executor의 속성을 확장하고 Runnable 또는 Callable 작업을 실행하기 위한 서비스를 설명하는인터페이스입니다. 제출 메소드는 Callable 또는 Runnable 형태의 작업을 입력으로 받아들이고, Future는 결과를 얻을 수 있는 반환 값으로 사용됩니다.
invokeAll 메소드 는 태스크 실행을 담당하고 상태 및 완료 결과와 함께 태스크 목록을 리턴합니다.
invokeAny 메소드는 태스크 실행을 담당하며, 성공적으로 완료된 태스크의 결과를 반환합니다(즉, 예외가 발생하지 않은 경우).
ScheduledExecutorService - 이 인터페이스는 특정 지연 또는 특정 기간 동안 보류 중인 작업을 실행하는 기능을 추가합니다.
AbstractExecutorService 는 ExecutorService 'a를 구성하기 위한 추상 클래스입니다. 내부에는 submit , invokeAll , invokeAny 메소드 의 구현이 있습니다. 이 클래스는 ThreadPoolExecutor , ScheduledThreadPoolExecutor 및 ForkJoinPool 을 상속합니다 .
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
Callable<String> task = () -> {
System.out.println(Thread.currentThread().getName());
return Thread.currentThread().getName();
};
scheduledExecutorService.schedule(task, 10, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();
}
ThreadPoolExecutor
Executors는 ThreadPoolExecutor , ScheduledThreadPoolExecutor를 생성하기 위한 팩토리 클래스입니다. 이러한 풀 중 하나를 만들어야 하는 경우 이 팩터리가 정확히 필요한 것입니다. 여기에는 Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable 등 다양한 어댑터가 포함되어 있습니다. 다른 ThreadPool을 생성하기 위한 정적 메서드가 있습니다.
ThreadPoolExecutor - Executor 및 ExecutorService 인터페이스를 구현 하고 작업 생성과 작업 실행을 분리합니다. Runnable 객체를 구현 하고 실행기로 보내야하며 ThreadPoolExecutor는 실행, 인스턴스화 및 스레드 작업을 담당합니다.
ScheduledThreadPoolExecutor - ThreadPoolExecutor 메서드 외에도지정된 지연 후 또는 주기적으로 실행할 명령을 예약할 수 있는 스레드 풀을 만듭니다.
스레드팩토리요청 시 새 스레드를 생성하는 개체입니다. Executors.newSingleThreadExecutor(ThreadFactory threadFactory) 메서드 에 인스턴스를 전달해야 합니다 .
ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "MyThread");
thread.setPriority(Thread.MAX_PRIORITY);
return thread; }
});
RejectedExecutionHandler - 어떤 이유로 ThreadPoolExecutor 를 통해 실행할 수 없는 작업에 대한 핸들러를 정의할 수 있습니다. 이것은 무료 스트림이 없거나 서비스가 종료되거나 종료될 때 발생합니다.
ThreadPoolExecutor 클래스 에는 몇 가지 표준 구현이 있습니다 .
- CallerRunsPolicy - 호출 스레드에서 작업을 실행합니다.
- AbortPolicy - 예외를 throw합니다.
- DiscardPolicy - 작업을 무시합니다.
- DiscardOldestPolicy - 대기열에서 시작되지 않은 가장 오래된 작업을 제거한 다음 새 작업을 다시 추가하려고 시도합니다.
완성 서비스
CompletionService 는 비동기 작업 시작과 결과 얻기를 분리하는 서비스 인터페이스입니다. 과업을 추가하기 위해서는 submit방식이, 이미 완료된 과업의 결과를 얻기 위해서는 블로킹테이크과 논블로킹폴.
ExecutorCompletionService는 ThreadPoolExecutor 또는 ForkJoinPool 과 같은 Executor 인터페이스를 구현하는 모든 클래스에 대한 래퍼입니다. 작업을 시작하고 실행을 제어하는 방법을 추상화해야 할 때 사용됩니다.
완료된 작업이 있으면 제거합니다. 작업이 없으면 작업이 완료될 때까지 대기합니다. 서비스는 핵심에서 LinkedBlockingQueue를 사용하지만 모든 BlockingQueue 구현을 전달할 수 있습니다.
GO TO FULL VERSION