A szálmenet megszakítása (szál megszakítása)

A szál megszakítása (szál megszakítása).

Két olyan osztályt vázoltam fel, amelyek a Runnable-ből származnak. Egyszerű töltelék (Thread.sleep és sout). Tanulmányoztam a szálak megszakításának kérdését megszakított és megszakítás nélkül. Valamilyen oknál fogva a megszakítás nem fordul elő, és a program végrehajtása hurkolt, és a hiba összeomlik:

A hiba elhagyása után a filamentumok munkája végtelennek tart. De ha eltávolítja a Thread.sleep-ot az Runnable-ből örökölt osztályokból, akkor a program normálisan végrehajtja. Mi a probléma, miért lép fel a hiba, és miért nem fejeződik be a program?
Itt van a fő:

Az alvás módja natív, azaz. a Java-n kívül más nyelven készült, ezért részletes vizsgálata kissé nehéz ... de kicsit másképp mentem, nevezetesen:

és a következő képet kapta - ennek a módszernek a végrehajtása után a megszakadt () hamis, így a hurok nem ér véget ... állítsa le a szálat úgy, hogy a szó megszakad a fogási blokkban.

Innen világos, hogy az alvásmód végrehajtása során bekövetkező kivétel biztonságosan el van ragadva, és a verem ki van adva, de a fentiek miatt - a szál csendesen működik.

A Grif Respect, a megpróbálkozás megakadályozásával - ez elsüllyesztve, jól működik. Továbbra is meg kell érteni, hogy ebben az esetben buktatók vannak-e.

Ie lehet, hogy a thread.interrupt () a try / catch blokk után kerül meghívásra, mielőtt ellenőrizné a (. Thread.interrupted ()) ciklusban, de úgy tűnik, hogy nagyon kicsi.

Itt van egy ilyen következtetés, megértettem a problémát.

Egy kicsit hibásan írtam le ennek a módszernek a végrehajtása után, a megszakadt () hibás, így a hurok nem ér véget ... állítsa le a szálat, ha a szót eltörik a fogási blokkban. Végül is, kivétel történik, és csak akkor hagyja el, ha az alvás módja megszakadt, ami azt jelenti, hogy a megbízhatóság érdekében jobb a további szál megszakítása, csak a tiszta formában megszakadt támaszkodás nem lehetséges.

) Tényleg és így is lehet:

Ez a véleményem szerint a gyakorlatban a leginkább megvalósítható és megvalósítható lehetőség. A blokkot a próbatestbe kell helyezni, és minden rendben lesz. És e.printStackTrace () helyett; akkor üzenetet küldhet (például "munka megszakad"), így a program művelete logikája érthető. Köszönöm a segítséget, Grif. plusz a profilon :)

) Egy jó ember, aki segít, nem kár :)
Különösen a névrokon :) És még inkább, hogy mi, ha az adataid helyesen vannak a profilban, az évek közötti különbség a kerek számhoz ... nagyon szimbolikus :)