logo

„Java ExecutorService“.

„Java ExecutorService“ yra sąsaja, leidžianti asinchroniškai vykdyti užduotis gijose. Java ExecutorService sąsaja yra java.util.concurrent pakete. „ExecutorService“ padeda išlaikyti gijų telkinį ir priskiria joms užduotis. Ji taip pat suteikia galimybę statyti užduotis į eilę, kol atsiras nemokama gija, jei užduočių skaičius yra didesnis nei turimų gijų.

„Java ExecutorService“.

Java ExecutorService metodai

Metodas apibūdinimas
loginis laukimo terminas (ilgas skirtasis laikas, laiko vienetas) Šis metodas blokuoja užduotį norint patekti į „ExecutorService“, kol visos užduotys bus baigtos po išjungimo užklausos arba pasibaigs nurodytas laikas arba nutrūks dabartinė gija, atsižvelgiant į tai, kas įvyks anksčiau.
SąrašasinvokeAll(Kolekcijaužduotys) Šis metodas vykdo pateiktų užduočių sąrašą ir grąžina ateities sandorių sąrašą, kuriame yra visų atliktų užduočių rezultatai.
SąrašasinvokeAll(Kolekcijaužduotys, ilgas laikas, laiko vienetas) Šis metodas vykdo pateiktų užduočių sąrašą ir grąžina ateities sandorių sąrašą, kuriame yra visų užduočių rezultatai, kai jie bus baigti arba pasibaigia skirtasis laikas, atsižvelgiant į tai, kas įvyksta anksčiau.
T invokeAny(Kolekcijaužduotys) Šis metodas vykdo pateiktų užduočių sąrašą ir grąžina vienos užduoties rezultatą, kuri bus atlikta be jokių išimčių.
T invokeAny(Kolekcijaužduotys, ilgas laikas, laiko vienetas) Šis metodas įvykdo pateiktų užduočių sąrašą ir grąžina vienos užduoties rezultatą, kuris yra atliktas be jokių išimčių prieš pasibaigiant skirtajam laikui.
loginis isShutdown() Šis metodas grąžina, ar nurodytas vykdytojas išjungtas, ar ne.
loginis yra Terminated() Šis metodas grąžina teisingą, jei visos užduotys buvo įvykdytos po išjungimo.
negaliojantis išjungimas () Šis metodas leidžia atlikti anksčiau „ExecutorService“ pateiktas užduotis ir neleidžia priimti jokių kitų užduočių.
Sąrašo išjungimas dabar () Šis metodas sustabdo visas aktyviai vykdomas užduotis, sustabdo eilėje esančių užduočių vykdymą ir grąžina eilėje esančių užduočių sąrašą.
Būsimas pateikimas (užduotis, kurią galima iškviesti) Šis metodas pateikia vykdyti vertę grąžinančią užduotį ir grąžina ateitį, kuri rodo laukiantį užduoties rezultatą.
Būsimas pateikimas (vykdoma užduotis) Šis metodas pateikia užduotį vykdyti ir grąžina tą užduotį reprezentuojančią ateitį. Sėkmingai užbaigus, jis grąžina nulį.
Būsimas pateikimas (vykdoma užduotis, T rezultatas) Šis metodas pateikia užduotį vykdyti ir grąžina tą užduotį reprezentuojančią ateitį.

Paprasta Java ExecutorService programa

 public class ExecutorServiceExample { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.execute(new Runnable() { @Override public void run() { System.out.println('ExecutorService'); } }); executorService.shutdown(); } } 

Išvestis:

prioritetinė eilė c++
„Java ExecutorService“.

Šioje programoje mes kuriame dešimties gijų „ExecutorService“ ir priskiriame jai anoniminį paleidžiamą diegimą, kuris atlieka užduotį spausdinti „ExecutorService“, o pasibaigus jos užduočiai išjungiame vykdytojo paslaugą.

Kaip naudotis Java ExecutorService

Instantiating ExecutorService

Galime naudoti „Java ExecutorService“, kad sukurtume vieną giją, gijų telkinį arba suplanuotą gijų telkinį. Vykdytojų klasėje pateikiami gamykliniai metodai, skirti ExecutorService sukurti taip:

 ExecutorService executorService1 = Executors.newSingleThreadExecutor(); //Creates //a ExecutorService object having a single thread. ExecutorService executorService2 = Executors.newFixedThreadPool(10); // Creates a //ExecutorService object having a pool of 10 threads. ExecutorService executorService3 = Executors.newScheduledThreadPool(10); //Creates a scheduled thread pool executor with 10 threads. In scheduled thread //pool, we can schedule tasks of the threads. 

Užduočių priskyrimas „ExecutorServices“.

Norėdami priskirti užduotį „ExecutorService“, galime naudoti šiuos metodus:

  • vykdyti (vykdoma užduotis)
  • pateikti (vykdoma užduotis) / pateikti (iškviečiama užduotis)
  • invokeAny(Kolekcijaužduotys)
  • invokeAll(Kolekcijaužduotys)

Užduoties priskyrimo „ExecutorService“ naudojant execute() metodą pavyzdys

if ir else in bash

Java ExecutorService metodas execute() priima paleidžiamą objektą ir atlieka savo užduotį asinchroniškai. Atlikę iškvietimo vykdymo metodą, iškviečiame išjungimo metodą, kuris blokuoja bet kokią kitą užduotį, kad ji atsidurtų eilėje executorService.

 public class ExecutorServiceExample { public static void main(String[] args) { ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.execute(new Runnable() { @Override public void run() { System.out.println('ExecutorService'); } }); executorService.shutdown(); } } 

Išvestis:

 ExecutorService 

Užduoties priskyrimo „ExecutorService“ naudojant submit() pavyzdys

Metodas submit() paima paleidžiamą objektą ir grąžina būsimą objektą. Šis objektas vėliau naudojamas norint patikrinti Runnable būseną, ar jis baigtas, ar ne.

 public class ExecutorServiceExample { public static void main(String[] args) { ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.submit(new Runnable() { @Override public void run() { System.out.println('ExecutorService'); } }); } } 

Užduoties priskyrimo „ExecutorService“ naudojant invokeAny() metodą pavyzdys

Metodas invokeAny() paima Callablle objektų rinkinį arba klasių objektus, įgyvendinančius Callable. Šis metodas grąžina būsimą iškviečiamo objekto objektą, kuris sėkmingai vykdomas pirmiausia.

svyruojantis css
 public class ExecutorServiceExample { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Set<callable> callables = new HashSet<callable>(); callables.add(new Callable() { public String call() throws Exception { return &apos;Task 1&apos;; } }); callables.add(new Callable() { public String call() throws Exception { return &apos;Task 2&apos;; } }); callables.add(new Callable() { public String call() throws Exception { return &apos;Task 3&apos;; } }); String result = executorService.invokeAny(callables); System.out.println(&apos;result = &apos; + result); executorService.shutdown(); } } </callable></callable>

Išvestis:

 result = Task 1 

Rezultate išsaugoma 1 užduotis, nes pirmasis iškviečiamas objektas yra sėkmingai įvykdytas pirmiausia.

Užduoties priskyrimo „ExecutorService“ naudojant invokeAll() metodą pavyzdys

kietais viršeliais vs minkštais viršeliais

Metodas invokeAll() paima iškviečiamų objektų, turinčių užduotis, rinkinį ir pateikia būsimų objektų sąrašą, kuriame yra visų užduočių rezultatai.

 public class ExecutorServiceExample { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executorService = Executors.newSingleThreadExecutor(); Set<callable> callables = new HashSet<callable>(); callables.add(new Callable() { public String call() throws Exception { return &apos;Task 1&apos;; } }); callables.add(new Callable() { public String call() throws Exception { return &apos;Task 2&apos;; } }); callables.add(new Callable() { public String call() throws Exception { return &apos;Task 3&apos;; } }); java.util.List<future> futures = executorService.invokeAll(callables); for(Future future : futures){ System.out.println(&apos;future.get = &apos; + future.get()); } executorService.shutdown(); } } </future></callable></callable>

Išvestis:

 future.get = Task 1 future.get = Task 3 future.get = Task 2 

Kaip išjungti „ExecutorService“.

Baigę užduotis, suteiktas „ExecutorService“, turime ją išjungti, nes „ExecutorService“ atlieka užduotį skirtingose ​​gijose. Jei neišjungsime „ExecutorService“, gijos ir toliau veiks, o JVM neišsijungs.

Išjungimo procesą galima atlikti šiais trimis būdais:

  • išjungimo() metodas
  • shutdownNow() metodas
  • awaitTermination() metodas