JavaRush/Курсы/Java Core/Остановить бушующий поток: неофициальная версия

Остановить бушующий поток: неофициальная версия

Открыта

— Привет, Амиго! Вот интересный вопрос, с которым ты уже столкнулся или столкнёшься в ближайшее время. А как остановить запущенную нить?

Допустим, пользователь отдал программе команду «загрузить файл из интернета». Главная нить создала для этого задания отдельную дочернюю нить, и передала ей объект, метод run которого содержит все необходимые действия для скачивания файла.

А тут пользователь – раз и передумал. Не хочет он качать этот файл. Как отменить задание и остановить нить?

— Да, как?

— Никак. Это и есть самый общий и самый правильный ответ. Нить остановить нельзя, она может остановиться только сама.

Но можно дать нити сигнал, сообщить ей каким-нибудь образом, что работу больше выполнять не нужно, и ей нужно завершиться. Так же, как главная нить завершается вместе с выходом из метода main, чтобы завершить дочернюю нить, она должна закончить выполнение метода run.

— И как это лучше всего сделать?

— Можно завести какую-нибудь переменную, например типа boolean. Если она true – нить работает. Если же она стала false – нить должна завершиться. Например, так:

Код Описание
class Clock implements Runnable {
    public void run() {
        while (true) {
            Thread.sleep(1000);
            System.out.println("Tik");

            if (!ClockManager.isClockRun) return;
        }
    }
}
Класс Clock (часы) будет вечно писать в консоль раз в секунду слово «Tik»

Если переменная ClockManager.isClockRun равна false – метод run завершится.

class ClockManager {
    public static boolean isClockRun = true;
    public static void main(String[] args) {
        Clock clock = new Clock(); Thread clockThread = new Thread(clock); clockThread.start();

        Thread.sleep(10000);
        isClockRun = false;
    }

}
Главная нить, запускает дочернюю нить – часы, которая должна работать вечно.

Ждет 10 секунд и подает часам сигнал на завершение.

Главная нить завершает свою работу.

Нить часов завершает свою работу.

— А если у нас несколько нитей, что тогда?

— Тогда лучше завести такую переменную для каждой нити. Удобнее всего будет добавить ее прямо в класс. Можно добавить туда переменную boolean isRun. Хотя лучше добавить переменную boolean isCancel, которая будет принимать значение true, если задание отменено.

Код Описание
class Clock implements Runnable {
    private boolean isCancel = false;

    public void cancel() {
        this.isCancel = true;
    }

    public void run() {
        while (!isCancel) {
            Thread.sleep(1000);
            System.out.println("Tik");
        }
    }
}
Класс Clock (часы) будет писать в консоль раз в секунду слово «Тик», пока переменная isCancel равна false.

Когда переменная isCancel станет равной true, метод run завершится.

public static void main(String[] args) {
    Clock clock = new Clock(); Thread clockThread = new Thread(clock); clockThread.start();

    Thread.sleep(10000);
    clock.cancel();
}
Главная нить, запускает дочернюю нить – часы, которая должна работать вечно.

Ждет 10 секунд и отменяет задание, вызовом метода cancel.

Главная нить завершает свою работу.

Нить часов завершает свою работу.

— Буду знать, спасибо, Элли.

Комментарии (279)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
TimJohnzz
Уровень 23
29 сентября, 12:10
Собрались мужчины, мне тоже половина непонятна, вы не одни такие, идем дальше!
Grigoryvvv
Уровень 28
Expert
4 сентября, 13:58
04.09.2026 / 26 уровень
3 сентября 2025, 07:41
Сделайте пожалуйста выравнивание кода в примерах.
Anonymous #3585174
Уровень 33
22 августа 2025, 07:32
like
Hack
Уровень 32
29 апреля 2025, 13:11
я прошел все модули джавараш кто начал проходит советую не бросать так как здесь показывают низкоуровневые реализации программы это очень важно для дальнейшего изучения и понимания и изучите паттерны проектирования для понимания примерно как реализованы фреймворки и библиотеки
Олег Сычев Java Developer
10 мая 2025, 03:41
Паттерны проектирования будут в курсе?
Hack
Уровень 32
11 мая 2025, 17:51
да фабрика, синглтон, команда, фабричный метод, абстрактная фабрика, прокси, декоратор, фасад
Олег Сычев Java Developer
11 мая 2025, 20:00
Спасибо!)
13чертей в аду (спасите)
20 мая 2025, 18:30
🫡
@itArarat
Уровень 32
7 февраля, 09:26
мы же решали задачи где были патерны ты не замечал ?
Alexander Pavlyuchenko
Уровень 2
9 февраля, 13:27
Спасибо за совет. А что такое паттерны? (Неловко маленько спрашивать), и какие источники посоветуешь?
20 февраля, 14:56
Паттерн - это что-то вроде готового решения самых распространенных задач.
Grigoryvvv
Уровень 28
Expert
4 сентября, 13:59
Паттерн - это шаблон
Anonymous #463526
Уровень 7
18 апреля 2025, 13:15
class Clock implements Runnable
{
public void run()
{
while (true)
{
Thread.sleep(1000);
System.out.println("Tik");

if (!ClockManager.isClockRun) return;
}
}
}
тут что-то или с кодом или с форматированием, сразу и не понять
VictorThe main expert in Automa в Строительная компани
10 апреля 2025, 10:53
По-моему это про потоки: Я - пущеная стрела, И нет зла в моeм сердце, но Кто-то должен будет упасть всe равно.
Артём ПъДиректор в Самокат
27 января 2025, 18:15
Топаю по JavaRush с 27.11.24 без остановок и передыха. Это работает, если делать и знать, что это всё не зря!!! Сегодня 27.01.25 - и я полон сил следовать далее... to be continue! Так что, поддержка всем дошедшим!
@itArarat
Уровень 32
7 февраля, 09:27
за 2 месяйа пройти столько ?я думаю в голове у вас ничего не осталось
j1nDo
Уровень 29
10 ноября 2024, 09:33
Застрял на 26 уровне на месяц, много работы и времени совсем не оставалось, но сейчас нашел новые силы и продолжаю изучать материал. Всем удачи))
zabungalilovo
Уровень 18
4 ноября 2024, 00:01
Ты, читающий это, оставь коммент тут! Да-да, именно ты! Много бойцов пало, но мы стойкие и должны держаться друг друга. Грустно видеть околонулевой актив под лекциями, поэтому наводите суету, показывайте что вы тут были и пошли дальше, мотивируйте друг друга, делитесь мыслями, впечатлениями, проблемами и успехами! Так учиться намного легче и продуктивнее!
Aboba
Уровень 1
9 ноября 2024, 18:27
Держать строй бойцы! У самого есть некоторые проблемы с запоминанием и пониманием материала, но нужно двигаться дальше, не всегда есть темы, которые можно и нужно разобрать здесь и сейчас
gerafen Backend Developer
10 ноября 2024, 15:17
на месте
zabungalilovo
Уровень 18
12 ноября 2024, 00:01
как успехи? какие впечатления от модуля?
gerafen Backend Developer
13 ноября 2024, 13:48
нормально, только задачки в конце уровня немного утомляют жёстко
ВК
Уровень 38
9 декабря 2024, 12:22
Оставляю. Вы то сами держитесь?)
Адилет А.
Уровень 1
9 декабря 2024, 18:57
суету навести охота
rockentrav
Уровень 34
14 декабря 2024, 03:46
застрял на этом уровне((
zabungalilovo
Уровень 18
15 декабря 2024, 23:58
учусь параллельно на онлайн-курсах, сейчас там пошел второй модуль после кора - веб разработка. И времени на джавараш сейчас совсем нет. Не знаю как успевать все, отстаю и там и тут. Потиху начинается депрессия.На моих курсах обучение состоит из 3 месяцев кора и 4 месяцев веба. На коре я пытался идти параллельно джаварашу, но дальше на курсах улетели вперед - очень ускоренная программа, зачастую по верхам. Исходя из этого делаю вывод, что идеальный вариант пройти джавараш за месяцев 6-7. И после этого шлифануть все это дело курсами. Либо изначально идти на курсы, которые идут от года. Если бы я мог отмотать время назад, то пошел бы на джава-университет скорее всего, там на 12 месяцев вроде как программа. А у вас как успехи?
ВК
Уровень 38
16 декабря 2024, 08:34
А я прошёл модули syntax и core менее чем за 3 недели (да, у меня есть бэкграунд и других языков и свободное время), но вот дальше появляется некая усталость от абстрактных задач - хочется уже делать пет-проекты, чтобы и теория устаканилась в голове, найдя полезные применения, и практика порадовала. Ну и ещё такой момент - на этом этапе у Javarush теоретический материал уже проседает (многие в комментариях начинают отмечать, что больше гуглят, чем читают, так что за они тогда платят, гуглить и бесплатно можно), а задачи становятся более трудоёмкими и кажутся оторванными от жизни (и опять же многие признают, что скипают их, не очень понимая, зачем им именно это). По этому поводу у меня некоторые сомнения, следует ли продолжать подписку - задачи я себе и сам придумаю, теорию для их решения и сам нагуглить могу... P.S. Ни в коем случае не хочу обидеть авторов JavaRush, первый модуль был чудесен и мотивационная часть была отличная и подбадривает до сих пор (я до сих пор хочу добить некоторые ачивки, хотя это совершенно иррационально). Но ближе к 30-му уровню появляется неудержимый практический зуд, который вряд-ли можно удовлетворить только курсами. P.P.S. Если это читает кто-то с уровней сильно за 30+, скажите как там? Даст Javarush там что-то, чего нельзя достичь самообразованием?
Deus Vult Программист 1с
27 декабря 2024, 16:42
у меня начинается депрессия, когда я вижу сколько откликов на вакансии java по сравнению с тем же 1с, в котором я сейчас работаю. иногда в 20 раз больше.
Henry Creel
Уровень 32
2 апреля 2025, 15:03
++
Alexander Pavlyuchenko
Уровень 2
9 февраля, 13:32
Лично мой совет: Тише едешь - дальше будешь. Если много сразу чего попытаться выучить то скорее всего будет каша в голове и выгорание... Организм тоже ведь устаёт поэтому важно и перерывы делать чтобы в голове успевало всё перевариться. Я заметил, что очень многие проходят намного быстрее меня, но зато, Слава Богу, выгорания нету, каши в голове нету, зато понимаешь и усваиваешь, пусть и всё равно бывают трудности. Лично я когда чувсвую что я устал либо не хочется - я берусь за отдых чтобы не было потом выгорания