Többszálú alkalmazás fejlesztésénél általában a szálak munkájának szervezésével kell foglalkoznunk. Minél nagyobb az alkalmazásunk és minél több szálra van szükségünk a többszálú feladatokhoz, annál többFuthatóaz általunk létrehozott objektumok.
Itt meg kell jegyezni, hogy a szál létrehozása Java-ban meglehetősen költséges művelet. Ha minden alkalommal létrehozunk egy új szálpéldányt egy művelet végrehajtásához, akkor nagy problémákat okozunk a teljesítménnyel, és ennek eredményeként az alkalmazás állapotával.
Itt egy szálkészlet és a ThreadPoolExecutor jön a segítségünkre.
A szálkészlet előre inicializált szálak halmaza. Mérete lehet fix vagy változó.

Ha több feladat van, mint szál, akkor a feladatok egy feladatsorban várakoznak. A készlet N-edik szála átvesz egy feladatot a sorból, és miután ez megtörtént, a szál új feladatot vesz fel a sorból. Miután a sorban lévő összes feladat végrehajtásra került, a szálak aktívak maradnak, és várnak az új feladatokra. Amikor új feladatok jelennek meg, a szálak azokat is végrehajtják.
ThreadPoolExecutor
A Java 5-től kezdve az Executor keretrendszer többszálú megoldást kapott. Általában sok összetevőből áll, és célja, hogy segítsen nekünk a várólisták és szálkészletek hatékony kezelésében.
A fő felületek az Executor és az ExecutorService .
Az Executor egy felület egyetlen void execute (Futtatható futtatható) metódussal.
Amikor átad egy feladatot ennek a módszernek a megvalósításához, vegye figyelembe, hogy a jövőben aszinkron módon fog végrehajtani.
ExecutorService – Olyan interfész, amely kiterjeszti az Executor felületet, és funkciókat ad hozzá a feladatok végrehajtásához. Ezenkívül rendelkezik egy futó feladat megszakítására és a szálkészlet leállítására szolgáló módszerekkel is.
A ThreadPoolExecutor megvalósítja az Executor és ExecutorService felületeket, és elválasztja a feladat létrehozását a feladat végrehajtásától. Meg kell valósítanunk a futtatható objektumokat, és el kell küldenünk őket egy végrehajtónak. A ThreadPoolExecutor ezután felelős a feladatok végrehajtásáért, valamint a szálak létrehozásáért és a velük való munkavégzésért.

Egy feladat végrehajtásra küldése után a rendszer egy meglévő szálat használ a készletben. Ez javítja a teljesítményt. Megoldja az erőforrások pazarlásának problémáját egy új szál létrehozására és inicializálására, majd ismét a szemétgyűjtésre, ha végeztünk a szállal.
A ThreadPoolExecutor 4 konstruktorral rendelkezik:
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler)
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory)
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
A ThreadPoolExecutor konstruktor a következő paraméterekkel rendelkezik:
corePoolSize | Ez a paraméter azt jelzi, hogy hány szál lesz készen (elindulva), amikor a végrehajtó szolgáltatás elindul. |
maximumPoolSize | A végrehajtó szolgáltatás által létrehozható szálak maximális száma. |
KeepAliveTime | Az az idő, ameddig egy felszabadult szál tovább él, mielőtt megsemmisülne, ha a szálak száma nagyobb, mintcorePoolSize. Az időegységeket a következő paraméter határozza meg. |
Mértékegység | Időegységek (óra, perc, másodperc, ezredmásodperc stb.). |
workQueue | Feladatok sorának megvalósítása. |
kezelő | Kezelő olyan feladatokhoz, amelyeket nem lehet elvégezni. |
threadFactory | Egy objektum, amely igény szerint új szálakat hoz létre. A szálgyárak használata függetlenné teszi az új szálak hívásait, lehetővé téve az alkalmazások számára speciális szálalosztályok, prioritások stb. használatát. |
ThreadPoolExecutor létrehozása
Az Executors segédprogram leegyszerűsítheti a ThreadPoolExecutor létrehozását . Ennek a segédosztálynak a metódusai segítenek elkészíteni aThreadPoolExecutortárgy.
newFixedThreadPool — Létrehoz egy szálkészletet, amely meghatározott számú szálat használ fel tetszőleges számú feladat végrehajtásához. |
|
newWorkStealingPool — Létrehoz egy szálkészletet, ahol a szálak száma megegyezik a JVM számára elérhető processzormagok számával. Az alapértelmezett párhuzamossági szint egy. Ez azt jelenti, hogy annyi szál jön létre a készletben, ahány CPU mag elérhető a JVM számára. Ha az egyidejűségi szint 4, akkor az átadott érték kerül felhasználásra a magok száma helyett. |
|
newSingleThreadExecutor — Egyetlen szálból álló készletet hoz létre az összes feladat végrehajtásához. |
|
newCachedThreadPool – Létrehoz egy szálkészletet, amely szükség szerint új szálakat hoz létre, de a korábban létrehozott szálakat újra felhasználja, ha azok elérhetők. |
|
newScheduledThreadPool – Létrehoz egy szálkészletet, amely ütemezheti a parancsok adott késleltetés utáni vagy időszakos végrehajtását. |
|
A következő leckékben az egyes medencetípusokat megvizsgáljuk.
GO TO FULL VERSION