ПредишенСледващото

Прекъсване потоци

Реших да проверя и да определи материала на лекцията прекъсна потоци, и се сблъскват с факта, че потокът не се прекъсва, т.е. понякога прекъсва, но гарантира, че няма прекъсване. Така например, според currentThread.interrupt () метод е да превключите на състоянието на променливата в състоянието на частния прекъсване вярно, но isInterupted () метод все още се връща фалшиви, т.е. на практика потокът дори не осъзнават, че той се опита да спре, въпреки че лекционния материал, преди да се обадите на същото метод сън проверява JVM не се опита да спре някого, ако този поток, но сън vseravno обработва и получава безкраен цикъл. Може би всичко това е, че прекъсването на инструкция () се изпраща на спане нишка, а когато той спи всички инструкции към него от негова страна, а в действителност може да прекъсне потока на думи само по изключение и то процес. Бих искал да се хвърли светлина върху тази ситуация, тъй като ще се съгласите, че е източник на грешки в бъдеще. Специално писмен код изпълнява Изпълнима, и се простира Тема за тестване на всички видове обекти.

Flux е публичен ENUM членка (можете да видите в Thread.java от IDEA кликване върху някой от неговите имоти с затяга Ctrl) - състояние.
Някои методи (изчакайте (), сън (), да се присъединят ()) показват държавна или
В ОЧАКВАНЕ (ако времето за чакане не е уточнено, като се присъединят ()), или
TIMED_WAITING (ако е посочено времето за изчакване, като на сън (1000)).

В тези държави, прекъсват повикване () се прекъсва и очакването, ще бъдат хвърлени InterruptedException без издаване на съответния флаг (държава, която връща isInterrupted ()).

Послепис Може би не съм напълно човешки.

Също така съм се разгледа този проблем през целия ден. И все пак аз разбирам такива моменти:
Ако премахнете сън () преди да се обадите на метода на прекъсване (), а след това по време на цикъла няма да започне и детето нишка се прекратява. Така стигам до Вейл флаг настроен да е истина, и той не го изпълнява в същото итерация на затворен и затвори зад него тече, съответно. Ако оставите основната нишка Thread.sleep (500); поставяне на закъснение най-малко 1 0 мсек, въпреки че състоянието на време не работи. Оказва се, че присъствието на повикване към документа, преди да се обадите iterapt kakimto променя флага незабавно обратно в лъжа.

Втората точка.
Ако премахнете всички докато примката и евтаназия дете нишка за дълго време, е възможно да спи в средата на него се събужда iteraptom от основния поток и тя ще бъде завършена успешно:
Оказва се, че методът на приплъзване по време на неговото изпълнение всички монитори време iterapted проверяват

По мое мнение - не. Обадете tik.interrupt () ще доведе до генерирането на InterruptedException и кода си получава в празен манипулатор улов (). А Thread.sleep (60000), няма нищо общо с него, а ако вместо това е някакъв вид математически изчисления - това щеше да бъде прекъснато.

Много просто, в началото на цикъл проверява докато стойността, а след това минава всичко вътре в контура, в началото на съня, го прекъсна и излиза от блока опит, а след това настроен на "флаг" фалшива позиция отново в блока за улов, и отново на новото. Въпреки първоначалната проверка се извършва, но след проверка, kogda поток заспали по време на прекъсване води до безкраен цикъл. Това е единствената възможност, когато isInterrupted () = вярно е, когато командата е дадено, или да блокира или веднага след това.

Информация от мислене в Java:
Секцията за улов показва прекъсване съобщение, заедно със стойността, върната от isInterrupted (). Когато друга нишка разговори прекъсват () за потока, указващ, че потокът е било прекъснато. Въпреки това, този флаг се връща в изключение на преработка, обаче улови раздел вътре резултатът винаги ще бъде фалшива. Знамето се използва и в други ситуации, в които потока могат да изследват техния прекъсна състояние с изключение на изключения.
Въз основа на гореизложеното, методът на сън в рамките на потока трябва винаги да бъде заобиколен от блок на уловените пробвам (друга версия на компилатора не propustaet) и блока улов винаги ще възстановите възможността прекъсва, така че манипулатор грешка трябва да определи прекъсването на потока (или някои други полезни функции) vrug в случаи (например дълго продължителни vychisletiya и т.н.), да се надяваме на isInterrupted () метод и факта, че не е манипулатор грешка, която ще върне прекъсване опция.

12583 четец / 2417 теми

Свързани статии

Подкрепете проекта - споделете линка, благодаря!