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 :)