menet prioritások

Prioritások folyik használt szál ütemező dönteni, ha az egyes folyamok megengedett lesz a munka. Elméletileg kiemelt áramlások több CPU időt, mint az alacsonyabb prioritású. Gyakorlatilag az összeg a CPU időt, amely megkapja a patak, gyakran több tényezőtől függ mellett a prioritás. (Például, hogy az operációs rendszer valósítja multitasking, az hatással lehet a relatív elérhetőségét CPU idő). Magas prioritás áramot is megelőz alacsony prioritású. Például, ha egy alacsony prioritású szál fut, kiemelt folytatódni fog a megszakított feladat (megszakítását vagy megszüntetését elvárás IO művelet), az utóbbi kisüti az alacsony prioritású szál.

Elméletileg áramlik egyenlő prioritást kell adni az egyenlő hozzáférést a CPU. De van, hogy legyen óvatos. Ne feledje, hogy a Java úgy tervezték, hogy a sokféle környezetben. Néhány ilyen környezetben végre multitasking alapvetően másképp másoktól. Biztonsági folyik, hogy azonos prioritást kell adni ellenőrzés egyaránt. Ez biztosítja, hogy minden szál képes lesz végre kell hajtani az operációs rendszerek nem preemptív multitasking. A gyakorlatban még környezetekben nem preemptív multitasking legtöbb szál még egy esélyt, hogy futni, mert a legtöbb szál elkerülhetetlenül blokkoló helyzetekben, mint például vár IO. Amikor ez megtörténik, a blokkolt menet van függesztve, és más szálak is futtatható. De ha azt akarjuk, hogy sima többszálú működés esetén nem hivatkozhat rá. Ezen túlmenően, bizonyos típusú problémák processzor igényes. Az ilyen áramok Capture processzor. Flow ilyen típusú akkor át kell ellenőrzés időről időre adni egy esélyt, hogy végre egy másik.

A prioritás a használat setPriority () metódus, amely tagja a téma osztályban. Tehát úgy néz ki, mint az általános formája:

végleges void setPriority (int level)

Itt egy új szintre meghatározza a prioritási szintje hívó szálat. Szignifikanciaszint kell tartományon belül akár MIN_PRIORITY MAX_PRIORITY. Abban a pillanatban ezek az értékek rendre az 1. és 10. Annak érdekében, hogy visszatérjen az áramlás az alapértelmezett prioritás válassza NORM_PRlORITY, amely most egyenlő 5. Ezek a prioritások meghatározása a static final (static final) változók Thread osztály.

Tudod kap az aktuális érték a szál prioritása, amelyben az osztály szál getPriority () metódus, az alábbiak szerint:

végleges int getPriority ()

A következő példa azt mutatja, két stream különböző prioritások futó a platform nélkül preemptív ütemezés másképp, mint a platform említett multitasking. Egy szál kap prioritást, két szinten magasabb a normálisnál, meghatározott Thread.NORM_PRIORITY, a másik - két szinten normális alá. Streams kezdeni, és készen áll, hogy indul az 10 másodperc. Minden szál végez hurok számlálására ismétlések számát. 10 másodperc után, a fő szál leáll mindkét áramot. Ezután a száma ciklusiteráció, ami végre minden szál jelenik meg.

// bemutatása menet prioritások.
osztályú kattanóelem végrehajtja futtatható hosszú kattintással = 0;
Szál t;
privát illékony logikai működési = true;
nyilvános kattanóelem (int p) t = új szál (ezt);
t.setPriority (p);
>
public void run () while (futás) kattintson ++;
>
>
public void stop () futás = false;
>
public void start () t. start ();
>
>
osztályú HiLoPri public static void main (String args []) Thread.currentThread ();
setPriority (Thread.MAX_PRIORITY);
kattanóelem hi = új kattanóelem (Thread.NORM_PRIORITY + 2);
kattanóelem Lo = új kattanóelem (Thread.NORM_PRIORITY - 2);
lo.start ();
hi.start ();
próbálja Thread.sleep (10000);
>
catch (InterruptedException e) System.out.println ( "fő megszakítják.");
>
lo.stop ();
hi.stop ();
// Várjon 10 másodpercig, mielőtt a megszakítás.
próbálja hi.t.join ();
lo.t.join ();
>
catch (InterruptedException e) System.out.println ( "Caught kivétel InterruptedException");
>
System.out.println ( "alacsony prioritás adatfolyam:" + lo.click);
System.out.println ( "magas prioritású menet:" + hi.click);
>
>

A kimenet a program indításakor a Windows alatt azt mutatja, hogy a patakok összefüggésben kapcsoló, bár nem volt kénytelen elfog processzor és nem blokkoló IO. A magas prioritású szál van a legtöbb CPU időt.

Alacsony prioritású szál: 4408112
Kiemelt menet: 589626904

Természetesen a pontos kimeneti által generált ez a program függ a sebesség a processzor és a szám a feladatokat a rendszerben. Amikor ugyanaz a program fut környezetben nem preemptív multitasking, akkor kap egy másik eredményt.

Egy másik megjegyzés a korábbi program. Megjegyezzük, hogy a változó működési előzi szó ingadozó. Bár illékony részletesebben a 13. fejezetben, akkor itt használt annak érdekében, hogy az érték a futó ellenőrizni kell minden egyes iterációs lépésben:

Anélkül, illékony Java képes optimalizálni a ciklust, hogy a helyi másolatot a futó jön létre. Az illékony megakadályozza ezt az optimalizálási, mondja a Java, amely hallgatólagosan futás a kód megváltoztatható megfelelően.

Kapcsolódó cikkek