Tagapagpatupad

Ang Executor ay ang batayang interface para sa mga klase na nagpapatupad ng paglulunsad ng mga Runnable na gawain. Nagbibigay ito ng tulong sa pagdaragdag ng gawain at kung paano ito sisimulan.

Ang ExecutorService ay isang interface na nagpapalawak ng mga katangian ng Executor at naglalarawan ng isang serbisyo para sa pagpapatakbo ng Runnable o Callable na mga gawain. Ang mga paraan ng pagsusumite ay tumatanggap ng isang gawain sa anyo ng isang Callable o Runnable bilang isang input , at ang isang Hinaharap ay ginagamit bilang isang return value, kung saan maaari mong makuha ang resulta.

Ang pamamaraan ng invokeAll ay responsable para sa pagpapatupad ng mga gawain, pagbabalik ng isang listahan ng mga gawain kasama ang kanilang katayuan at mga resulta ng pagkumpleto.

Ang invokeAny method ay may pananagutan sa pagsasagawa ng mga gawain, pagbabalik ng resulta ng isang matagumpay na nakumpletong gawain (iyon ay, nang walang pagbubukod), kung mayroon man.

ScheduledExecutorService - ang interface na ito ay nagdaragdag ng kakayahang magpatakbo ng mga nakabinbing gawain na may isang tiyak na pagkaantala o isang tiyak na panahon.

Ang AbstractExecutorService ay isang abstract na klase para sa pagbuo ng isang ExecutorService 'a. Sa loob ay mayroong pagpapatupad ng submit , invokeAll , invokeAny method . Ang klase na ito ay nagmamana ng ThreadPoolExecutor , ScheduledThreadPoolExecutor at 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

Ang Executors ay isang factory class para sa paglikha ng ThreadPoolExecutor , ScheduledThreadPoolExecutor . Kung kailangan mong lumikha ng isa sa mga pool na ito, kung gayon ang pabrika na ito ay eksakto kung ano ang kailangan mo. Naglalaman ito ng iba't ibang mga adaptor na Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable at iba pa. May mga static na pamamaraan para sa paglikha ng iba't ibang ThreadPool .

ThreadPoolExecutor - Ipinapatupad ang mga interface ng Executor at ExecutorService at pinaghihiwalay ang paggawa ng gawain mula sa pagsasagawa ng gawain. Kailangan nating ipatupad ang mga Runnable na bagay at ipadala ang mga ito sa executor, at ang ThreadPoolExecutor ay may pananagutan para sa kanilang pagpapatupad, instantiation at trabaho sa mga thread.

ScheduledThreadPoolExecutor - Bilang karagdagan sa mga pamamaraan ng ThreadPoolExecutor , lumilikha ito ng isang pool ng mga thread na maaaring mag-iskedyul ng mga utos na isakatuparan pagkatapos ng isang partikular na pagkaantala o para sa pana-panahong pagpapatupad.

ThreadFactoryay isang bagay na lumilikha ng mga bagong thread on demand. Kailangan nating magpasa ng isang instance sa Executors.newSingleThreadExecutor(ThreadFactory threadFactory) method .

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 - nagbibigay-daan sa iyo na tukuyin ang isang handler para sa mga gawain na sa ilang kadahilanan ay hindi maisasagawa sa pamamagitan ng ThreadPoolExecutor . Nangyayari ito kapag walang mga libreng stream o ang serbisyo ay isinara o isinara.

Maraming karaniwang pagpapatupad ang matatagpuan sa klase ng ThreadPoolExecutor :

  • CallerRunsPolicy - nagpapatakbo ng isang gawain sa thread ng pagtawag;
  • AbortPolicy - nagtatapon ng exception;
  • DiscardPolicy - binabalewala ang gawain;
  • DiscardOldestPolicy - Tinatanggal ang pinakalumang hindi pa nasimulang gawain mula sa pila, pagkatapos ay susubukang magdagdag muli ng bagong gawain.

Serbisyo sa Pagkumpleto

Ang CompletionService ay isang interface ng serbisyo na may decoupling ng paglulunsad ng mga asynchronous na gawain at pagkuha ng mga resulta. Upang magdagdag ng mga gawain, mayroong isang paraanng pagsusumite, at upang makuha ang mga resulta ng mga nakumpleto na gawain, isang paraan ng pagharang sapagkuhaat isang hindi pagharangng poll.

Ang ExecutorCompletionService ay isang wrapper sa anumang klase na nagpapatupad ng interface ng Executor , gaya ng ThreadPoolExecutor o ForkJoinPool . Ito ay ginagamit kapag ito ay kinakailangan upang abstract mula sa paraan ng paglulunsad ng mga gawain at pagkontrol sa kanilang pagpapatupad.

Kung may mga nakumpletong gawain, pagkatapos ay bubunutin namin sila. Kung walang mga gawain, pagkatapos ay maghintay kami hanggang sa makumpleto ang isang bagay. Gumagamit ang serbisyo ng LinkedBlockingQueue sa core nito, ngunit maaari kang pumasa sa anumang pagpapatupad ng BlockingQueue.