Többszálú programozás java 8

Többszálú programozás java 8
Többszálú programozás java 8

Üdvözöljük az első része a párhuzamos programozás Java útmutató 8. Ebben a részben, úgy véljük, egyszerű példát, hogyan kell végrehajtani kód párhuzamosan szálak, feladatait és szolgáltatási előadók.

Ez az első alkalom Concurrency API került bevezetésre, melynek megjelenése Java 5 és azóta fejlődött minden új Java verziót. A legtöbb példa lehet megvalósítani régebbi verziói, de ebben a cikkben fogom használni lambda kifejezés. Ha még mindig nem ismerik a fejlesztések Java 8, azt ajánlom, hogy nézd meg a kalauz.

Áramlások és feladatok

Minden modern operációs rendszer támogatja a párhuzamos végrehajtását kódot a folyamatok és szálak. A folyamat - egy példánya a program fut a többitől függetlenül. Például, ha egy olyan programot futtat a Java, az operációs rendszer létrehoz egy új folyamat, amely párhuzamosan fut a többiek. Bent a folyamatokat használjuk flow, ezáltal kisakkozni a processzor kapacitása.

Streams (szálak) támogatott Java óta JDK 1.0. Mielőtt elkezdené a szál, szükséges, hogy egy kódrészlet, ami általában úgynevezett „objektív» (feladat). Ez úgy történik, végrehajtási futtatható felületen. amely csak az egyik módszer nem érv, visszatér void - run (). Íme egy példa arra, hogyan működik ez:

Ha ezt a kódot, akkor megjelenik egy másodperces késleltetés közötti kimenete az első és a második sor a képernyőn. TimeUnit - hasznos osztályának dolgozó időegységek, de ugyanez lehet tenni Thread.sleep (1000).

Vegyünk most egy közelebbi pillantást az egyik legfontosabb része a Concurrency API - végrehajtási szolgálat (hagyatéki szolgáltatások).

művészek

Egyidejű API bevezeti a szolgáltatás fogalma a végrehajtó (ExecutorService) - egy magas szintű csere szálak közvetlenül. Művészek feladatok elvégzésére aszinkron általában használ egy szál medence, így nem kell létrehozni őket kézzel. Az összes szál a medencében, hogy újra felhasználható, miután a feladatot, ami azt jelenti, hogy létre, mint sok feladatot az alkalmazás, mint szeretnénk, segítségével az egyik előadó.

Itt van, hogyan fog kinézni az első példa a művész:

ExecutorService executor = Végrehajtók. newSingleThreadExecutor ();

végrehajtó. benyújtja (() ->

Húr threadName = Szál. currentThread (). getName ();

Rendszer. ki. println ( "Jó napot" + threadName);

// => Szia pool-1-thread-1

Végrehajtók osztály kényelmes gyári módszerek létrehozása a különböző művészek szolgáltatásokat. Ebben az esetben mi használt előadóművész egy szál.

Az eredmény ugyanúgy néz ki, mint legutóbb. Azonban ez a kód van egy fontos különbség - akkor soha nem hagyja abba. végrehajtása elvégzéséhez szükséges munkamennyiség világosan. Ehhez ExecutorService felület két módszer: leállítás (). amely megvárja az üzemeltetési feladatokat, és shutdownNow (). amely leállítja az énekes azonnal.

Itt van, hogyan Inkább abba az énekesek:

A fenti példában használt másik típusú előadóművészek, ami által létrehozott eljárás newWorkStealingPool (). Ez a módszer megjelent Java 8 és nem úgy viselkedik, mint a többi: ahelyett, hogy egy előre meghatározott számú szálat hoz létre ForkJoinPool bizonyos párhuzamosság (párhuzamosság méret). alapértelmezés szerint a számos gépi magot.

ForkJoinPool először a Java 7 és áttekintjük azt részletesebben a következő fejezetekben a menedzsment. Most nézzük meg a szereplők egy ütemező (menetrend végrehajtók).

Művészek egy ütemező

Azt már tudjuk, hogyan kell adni a feladatot végrehajtó és kap az eredmény. Annak érdekében, hogy rendszeresen futtatja a feladatot, fel tudjuk használni a menet medence egy ütemező.

ScheduledExecutorService képes futtatni feladatok egy vagy több alkalommal, egy előre meghatározott intervallumban.

Ez a példa azt mutatja, hogyan lehet eljutni az énekes, hogy egy feladatot három másodperc után:

Kapcsolódó cikkek