„Здравей, Амиго! Ето един интересен въпрос, който or вече си задал, or скоро ще си зададеш. Как се спира работеща нишка? “
Да приемем, че потребителят казва на програмата да «изтегли файл от интернет». Главната нишка създава отделна дъщерна нишка за това задание и й предава обект, чийто метод за изпълнение съдържа всички необходими действия за изтегляне на file.
Но изведнъж потребителят променя решението си. Той не иска да изтегли file. Как да анулираме задание и да спрем нишката?
— Да, кажи ми How?
" Не можем. Това е най-често срещаният и най-правилният отговор. Не можете да спрете нишка. Само тя може да спре сама себе си. "
Но можете да изпратите сигнал до нишка, като по няHowъв начин ѝ кажете, че работата вече не трябва да се извършва и че трябва да прекрати. Точно Howто основната нишка завършва с връщане от основния метод, дъщерната нишка завършва с връщане от метода run.
„Кой е най-добрият начин да направите това?“
"Можете да добавите няHowва променлива, като например boolean . Ако е true , нишката се изпълнява. Ако е false , нишката трябва да прекрати. Като това, например:"
Код | Описание |
---|---|
|
Класът Clock пише «Tick» на конзолата веднъж в секунда завинаги Ако ClockManager.isClockRun е false, методът за изпълнение приключва. |
|
Основната нишка стартира дъщерна нишка (часовник), която трябва да работи вечно
Изчакайте 10 секунди и дайте на часовника сигнал за край. Основната нишка завършва своята работа. Нишката на часовника приключва работата си. |
„Ами ако имаме няколко нишки, тогава Howво?“
„Най-добре е да имате такава променлива за всяка нишка. Най-удобно е да я добавите директно към класа. Можете да добавите булева променлива isRun там. Въпреки това е по-добре да добавите булева променлива isCancel , която става true, ако задачата е отменен."
Код | Описание |
---|---|
|
Класът Clock записва думата «Tick» в конзолата веднъж в секунда, докато isCancel е невярно.
Когато isCancel стане true, методът за изпълнение се прекратява. |
|
Основната нишка стартира дъщерна нишка (часовник), която трябва да работи вечно
Изчакайте 10 секунди и отменете задачата, като извикате метода за отмяна. Основната нишка завършва своята работа. Нишката на часовника приключва работата си. |
„Ще го имам предвид. Благодаря, Ели.“
GO TO FULL VERSION