Megszakítás szálak

megszakítás patakok

Úgy döntöttünk, hogy ellenőrizze és rögzítse az anyagot az előadás megszakadt áramlik, és szembesülnek azzal a ténnyel, hogy az áramlás nem szakad, azaz néha megszakad, de garantálja a megszakítás nélkül. Például szerint currentThread.interrupt () metódus segítségével válthat az állam a változót a saját megszakítás feltétel igaz, de isInterupted () metódus mindig false értékkel tér vissza, azaz lényegében az áramlás nem is veszik észre, hogy megpróbálta megállítani, de az előadás anyaga hívása előtt azonos alvás módszer ellenőrzi a JVM nem próbálta megakadályozni, hogy valaki, ha ezt az áramot, de aludni vseravno feldolgozott és előállított egy végtelen ciklus. Lehet, hogy az egész dolog, hogy az utasítás interrupt () küldenek egy alvó szál, és mikor alszik az összes utasítást neki az ő oldalán, és valójában megszakíthatja a szóáradat csak kivétel, és feldolgozását. Szeretnék némi fényt ez a helyzet, hiszen akkor egyetértek ez a forrása a jövőbeli hibák. Kifejezetten írt kódot végrehajtja futtatható, és kiterjeszti szál tesztelni mindenféle tárgyakat.

Flux van az állami enum állam (látható Thread.java által IDEA kattintással bármelyik tulajdonságok befogott Ctrl) - állapot.
Egyes módszerek (várjon (), sleep (), csatlakozzon ()) olyan állapotba vagy
Várakozás (ha a várakozási idő nincs megadva, így csatlakoznak ()), vagy
TIMED_WAITING (ha meg van adva a várakozási idő, mint az alvás (1000)).

Ezekben az államokban a hívás megszakítás () megszakad, és a várakozás lesz dobni InterruptedException kiadása nélkül a megfelelő zászló (állam, amely visszaadja isInterrupted ()).

Ui Talán nem teljesen emberi.

Én is megvizsgálja ezt a kérdést minden nap. Mégis megértem az ilyen pillanatokat:
Ha eltávolítja a sleep () hívás előtt a megszakítás () metódus, akkor a while ciklus nem indul el, és a gyermek menet véget ér. Szóval jöjjön Vail flag értéke igaz, és ő nem teljesítménye a iteráció zárt és becsukódott mögötte fut, ill. Ha elhagyja a fő téma Thread.sleep (500); amivel egy késés legalább 1 0 msec noha a feltétele a közben nem működik. Kiderült, hogy a jelenléte egy hívást, hogy a csúszás előtt hívja iterapt kakimto megváltoztatja a zászló azonnal vissza hamis.

A második pont.
Ha eltávolítja az összes a while ciklus, és euthanize a gyermek menet hosszú ideig, akkor lehet aludni a közepén felébreszti iteraptom a fő stream, és ez lesz sikeresen befejeződött:
Kiderült, hogy az eljárás a csúszás a végrehajtás során minden alkalommal monitorok ellenőrizze iterapted

Véleményem - nincs. Hívjon tik.interrupt () azt eredményezi, hogy a generációs InterruptedException és a kód lesz egy üres kezelő fogás (). A Thread.sleep (60000) semmi köze hozzá, és ha ahelyett, hogy egyfajta matematikai számítás - ez megszakadt.

Egészen egyszerűen elején hurok ellenőrzi az érték darabig, majd lefuttatja az összes a cikluson belül, az elején az alvás, félbeszakította, és ki a try blokkban, majd állítsa „flag” false helyzetben ismét a catch blokk, és ismét az új. Míg az előzetes ellenőrzés zajlik, de ellenőrzése után, kogda áramlási alszik, miközben megszakítás hatására végtelen ciklusba került. Ez az egyetlen esély, ha isInterrupted () = igaz, ha a parancs kiadásakor vagy blokkolni, vagy közvetlenül utána.

Tájékoztatás a gondolkodás Java:
A fogás részén megjelenik egy üzenet, megszakítás együtt által visszaadott érték isInterrupted (). Ha egy másik szál hívások megszakítja () a patak, amely jelzi, hogy az adatfolyam megszakadt. Azonban ez a jelző visszaáll a feldolgozás esetén, azonban elkapni részén belül az eredmény mindig hamis. A zászló alkalmazható olyan helyzetekben, ahol az áramlás lehet felfedezni a megszakított állapotban kivételektől eltekintve.
A fentiek alapján az alvási eljárás keretében az áramlás mindig körülvéve egy blokk try catch (egy másik változata a fordító nem propustaet), és a catch blokk mindig visszaállíthatja az opció megszakítja, hogy a hibakezelő kell állítani az áramlás megszakítása (vagy más hasznos funkciók) vrug esetekben (például a hosszú elhúzódó vychisletiya, stb) is remélni isInterrupted () metódus és az a tény, hogy nincs hibakezelő, amely visszaállítja a megszakítási lehetőséget.

12583 olvasó / 2417 téma

Kapcsolódó cikkek