Executor moj khaum rau java yog dab tsi?

Ntawm lub moj khaum Executor muaj tau nkag tau rau hauv Java 1.5 thiab nws yog ib feem ntawm cov pob java.util.concurrent. Qhov lub moj khaum Executor lawm ib abstraction tseeb txog qhov kev siv java multithreading. Nws yog siv rau cov standardizing invocation, teem dua, tiav thiab tswj kev pab raws qib raws txheej tso cai sau tseg rau thaum lub caij cov creation ntawm lub constructor asynchronous.

Ua ntej java 1.5, multithreading daim ntaub ntawv tau tsim siv xov pawg , xov pas los yog kev cai xov pas. Tam sim no tus tswj ntawm txhua lub xov lawm los yog ua los ntawm cov programmer khaws ntsoov cov ntsiab lus nram qab no
● Synchronization
● txhav tas
● kev ceeb toom
● xauv tuag
Thiab ntau tshaj uas tshwm sim tawm hauv cov ntaub ntawv yuav tsum tau. Qee lub sij hawm nws yog heev tsis yooj yim uas tswj cov kev siv multithreading vim tus yeeb yam tsis zoo ntawm cov threads kuj nyob rau ntawm tej qhov uas daim ntawv thov no deployed thiab ciav. Piv txwv li cov processor ceev, cov RAM loj, cov qhab dav tas nrho muaj ib tug tib neeg ntxim rau cov ntaub ntawv multithreading rau. Li ntawd, koj yuav tsum nco tej yam zoo tas nrho tej ua ntej yuav tsim architecture.
Ib lub moj khaum Executor muaj threading ntau daim ntawv thov kev pab nrog ib tug abstraction tau yooj yim kev xav txog cov kev pab raws qib. Tsis xav saib raws threads, ib daim ntawv thov tam sim no tsuas muaj zoo muaj Runnable deals (Nws yog ib qho yeej collections kev paub tab). Thiab ces nws yog kis rau tus Executor rau txheej txheem. Cov ExecutorService interface extends simplistic Executor interface thiab muaj lub neej txoj kev los tswj cov lub moj khaum executor.
Qhov lub moj khaum Executor nruab nrab yog paub tab uas siv zoo muaj Runnable los yog Callable. Runnable tus khiav () txoj kev tsis rov qab muaj nqis los yog pov lub kos uas koj mus soj ntsuam. Callable yog ib version haumxeeb ntau nyob hauv. Nws nyiaj thiab lub sij hu () txoj kev tso cai rau tus xa ntawm ib co xoo tus nqi uas yuav siv tau ua yav zauv. Thiab nws kuj throws kev zam yog hais tias tsim nyog.
Tus FutureTask kawm siv rau yav tom ntej qhia rau koj txog txoj kev ua. Thaj ntawm cov hoob kawm no yuav qhwv tus Callable los yog ib tug Runnable. Koj yuav tau txais thaj no li tus nqi ntawm submit tuaj () txoj kev uas ib tug ExecutorService. Koj yuav manually kuj qhwv koj cov hauj lwm nyob hauv lub FutureTask ua ntej hu rau txim tuag () txujci.
Nram qab no yog cov kauj ruam muaj nuj nqi rau siv cov ThreadPoolExecutor.
● tsim ntau yam los ib leeg xov ib paab.
● A queue yog tsim tuav tag nrho cov kev pab raws qib, tiam sis cov paub tab tsis tau raug threads ntawm lub pas dej ua ke. Bounded thiab unbounded queues no muaj.
● Rejection handler yog siv los mus daws qhov teeb meem no thaum paub tab dua yuav tsis muaj npe nyob rau hauv cov queue. Raws li ib txoj cai rejection neej ntawd, nws tsuas yuav pov RejectedExecutionException runtime kos, thiab daim ntawv thov yuav laib los yog muab pov tseg kom nws.

Nram no yog ib qho piv txwv rau saib lub voj voog txoj sia ntawm ib lub moj khaum executor. Ntawm no peb yuav tsuas tham txog lub hauv paus cov kauj ruam thiab cov theem pib interfaces. Muaj ntau ntau zog thiab subclasses mus ko lwm hom neeg ua ntawv thov yuav tsum tau.

Cov chav kawm ntawv nram qab no implements Runnable thiab nws cov tamsim no yuav siv li ib tug neeg ua hauj lwm nyob rau hauv cov seem tom ntej ntawm txoj.

public class jobPrint implements Runnable {
private final String name;
private final int delay;
public jobPrint(String name, int delay) {
this.name = name;
this.delay = delay;
}
public void run() {
System.out.println("Starting: " + name);
try {
Thread.sleep(delay);
} catch (InterruptedException ignored) {
}
System.out.println("Done with: " + name);
}
}

Cov chav kawm ntawv nram qab no yog kev siv cov kev pab raws qib executor.

import java.util.concurrent.*;
import java.util.Random;

tsev kawm UseExecutorService {
pej xeem tsis muaj dabtsis loj zoo li qub(Txoj hlua args[]) {
Random random = Random tshiab();
ExecutorService executor = Executors.newFixedThreadPool(3);
// Zaum saum lub sij hawm tos kom paub thaum twg los shutdown
rau cov menyuam waitTime = 500;
rau (rau cov menyuam kuv = 0; Kuv<10; i ) {
Txoj hlua npe = “NamePrinter ” + Kuv;
rau cov menyuam caij = random.nextInt(1000);
lub sij hawm = waitTime;
Runnable khiav = jobPrint tshiab(lub npe, lub sij hawm);
System.out.println(“Ntxiv: ” + lub npe + ” / ” + lub sij hawm);
executor.execute(khiav);
}
sim {
Thread.sleep(waitTime);
executor.shutdown();
executor.awaitTermination
(waitTime, TimeUnit.MILLISECONDS);
} ntes (Ignored InterruptedException) {
}
System.Exit(0);
}
}

Ua tus executor

Ua ntej tsim thaj ua tus Executor los yog ExecutorService. Cov chav kawm ntawv Executors muaj ntau txoj kev zoo li qub Hoobkas los tsim tau ib lub ExecutorService. Piv txwv, newFixedThreadPool() rov ib lom ThreadPoolExecutor ib initialized thiab unbounded queue hab taag ntau threads. Thiab newCachedThreadPool () rov ua ib ThreadPoolExecutor lom initialized ib unbounded queue thiab unbounded ntau threads. Nyob rau hauv rooj plaub thib, threads uas twb muaj lawm yog reused yog hais tias muaj.Yog hais tias tsis muaj cov xov pub dawb nyob, tshiab yog tsim thiab ntxiv rau lub pas dej ua ke. Threads dawb kom ntev dua ib lub sij hawm ua timeout tau yuav raug tshem tawm tau ntawm lub pas dej ua ke.
Qhov no yog ib zag paab 15 threads.
lwm yam zoo li qub thaum kawg Executor executor = Executors.newFixedThreadPool(15);
Qhov no yog ib cov xov cached pas
lwm yam zoo li qub ExecutorService exec = Executors.newCachedThreadPool();
Nram no yog ib qhov xov customized pas executor. Tus parameter yaam tseem ceeb nuav nyob ntawm seb yog thaum cov ntaub ntawv yuav tau. Ntawm no cov tub ntxhais pas yog muaj 5 tus uas tau khiav concurrently threads thiab ntau pes tsawg 10. Tus queue muaj peev xwm sawv ua 200 paub tab. Ntawm no ib kis yuav tsum nco ntsoov hais tias tias lub pas dej ua ke raws li yuav tsum khaws tseg cia rau ntawm ib sab ntau dua kom haum rau txhua yam kev pab raws qib. Lub sij hawm txwv dawb cia li 5 MS.
lwm yam zoo li qub thaum kawg Executor executor = ThreadPoolExecutor tshiab(5, 10, 50000L, TimeUnit.MILLISECONDS, LinkedBlockingQueue tshiab(200));

Ua kom paub tab dua thiab muab tso rau hauv lub queue

Tsim dua paub tab los yuav tau ua zoo muaj Runnable los yog Callable.

Xa cov ntawv ua hauj lwm rau tus Executor

Tom qab peb cov ExecutorService, koj yuav tsum xa cov ntaub ntawv xa ib tug neeg ua hauj lwm rau nws siv tog twg los () los yog txim tuag () txujci. Tam sim no tus xov dawb xwb los ntawm lub pas dej ua ke yuav yeej siv cov kev paub tab ntawm qhov queue thiab coj nws. Tam sim no tus txheej txheem yuav kom txhua tus paub tab yog tas los ntawm cov queue.

Coj cov neeg ua hauj lwm

Tam sim no tus Executor yog tswj txoj hauj lwm tiav, xov pas dej ua ke thiab queue. Lub pas dej ua ke ntawd qis dua nws ntau yam tsawg kawg threads configured, threads tshiab yuav tsim rau lis queued paub tab txog thaum ntawd txhob yog mus txog tus nqi configured. Yog hais tias muaj ntau tshaj li qhov tsawg kawg yog configured, ces lub pas dej ua ke yuav tsis pib muaj ntau threads. Xwb, neeg ua hauj lwm yog queued mus txog rau thaum lub xov yog pab daws tau mus ua ntaub ntawv thov. Yog hais tias tus queue tag nrho, ces ib tug tshiab xov yog pib ko nws.

Shutdown tus Executor

Tus muab sau los ntawm invoking, shutdown () txujci. Koj muaj cai xaiv kom muaj cai gracefully nws, los yog dheev.

Ib tug xav rau"Executor moj khaum rau java yog dab tsi?

============================================= ============================================== Yuav zoo TechAlpine phau ntawv rau Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Txaus siab rau qhov blog? Tshaj tawm lus thov :)

Follow by Email
LinkedIn
LinkedIn
Share