Utfører

Executor er basisgrensesnittet for klasser som implementerer lanseringen av kjørbare oppgaver. Dette gir hjelp til å legge til en oppgave og hvordan du starter den.

ExecutorService er et grensesnitt som utvider egenskapene til Executor og som beskriver en tjeneste for å kjøre Runnable eller Callable oppgaver. Sendemetodene godtar en oppgave i form av en Callable eller Runnable som input , og en Future brukes som en returverdi, som du kan få resultatet gjennom.

InvokeAll- metoden er ansvarlig for å utføre oppgaver, returnere en liste over oppgaver med status og fullføringsresultater.

InvokeAny- metoden er ansvarlig for å utføre oppgaver, returnere resultatet av en vellykket fullført oppgave (det vil si uten å kaste et unntak), hvis noen.

ScheduledExecutorService - dette grensesnittet legger til muligheten til å kjøre ventende oppgaver med en viss forsinkelse eller en viss periode.

AbstractExecutorService er en abstrakt klasse for å konstruere en ExecutorService 'a. Inne er det en implementering av submit , invokeAll , invokeAny -metodene . Denne klassen arver ThreadPoolExecutor , ScheduledThreadPoolExecutor og 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 er en fabrikkklasse for å lage ThreadPoolExecutor , ScheduledThreadPoolExecutor . Hvis du trenger å lage et av disse bassengene, så er denne fabrikken akkurat det du trenger. Den inneholder forskjellige adaptere Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable og andre. Har statiske metoder for å lage forskjellige ThreadPool .

ThreadPoolExecutor – Implementerer Executor- og ExecutorService- grensesnittene og skiller oppgaveoppretting fra oppgavekjøring. Vi må implementere kjørbare objekter og sende dem til eksekveren, og ThreadPoolExecutor er ansvarlig for deres utførelse, instansiering og arbeid med tråder.

ScheduledThreadPoolExecutor - I tillegg til ThreadPoolExecutor- metodene oppretter den en pool av tråder som kan planlegge kommandoer som skal utføres etter en gitt forsinkelse eller for periodisk kjøring.

ThreadFactoryer et objekt som lager nye tråder etter behov. Vi må sende en forekomst til Executors.newSingleThreadExecutor(ThreadFactory threadFactory) -metoden .

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 - lar deg definere en behandler for oppgaver som av en eller annen grunn ikke kan utføres gjennom ThreadPoolExecutor . Dette skjer når det ikke er noen gratis strømmer eller tjenesten er stengt eller stengt.

Flere standardimplementeringer finnes i ThreadPoolExecutor -klassen :

  • CallerRunsPolicy - kjører en oppgave på anropstråden;
  • AbortPolicy - kaster et unntak;
  • DiscardPolicy - ignorerer oppgaven;
  • DiscardOldestPolicy - Fjerner den eldste ustartede oppgaven fra køen, og prøver deretter å legge til en ny oppgave på nytt.

Fullføringstjeneste

CompletionService er et tjenestegrensesnitt med frakobling av lansering av asynkrone oppgaver og oppnå resultater. For å legge til oppgaver er det en innsendingsmetodeåfå resultatene av allerede fullførte oppgaver brukes en blokkeringsmetodeogen ikke-blokkerendeavstemningsmetode.

ExecutorCompletionService er en innpakning over enhver klasse som implementerer Executor- grensesnittet , for eksempel ThreadPoolExecutor eller ForkJoinPool . Den brukes når det er nødvendig å abstrahere fra metoden for å starte oppgaver og kontrollere utførelsen av dem.

Hvis det er fullførte oppgaver, så trekker vi dem ut. Hvis det ikke er noen oppgaver, så henger vi i tak til noe er fullført. Tjenesten bruker en LinkedBlockingQueue i kjernen, men du kan sende inn en hvilken som helst BlockingQueue-implementering.