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

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

Java Core
6 уровень , 8 лекция
Открыта

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

Допустим, пользователь отдал программе команду «загрузить файл из интернета». Главная нить создала для этого задания отдельную дочернюю нить, и передала ей объект, метод 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.

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

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

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

Комментарии (278)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Grigoryvvv Уровень 26 Expert
4 сентября 2026
04.09.2026 / 26 уровень
3 сентября 2025
Сделайте пожалуйста выравнивание кода в примерах.
Anonymous #3585174 Уровень 33
22 августа 2025
like
Hack Уровень 32
29 апреля 2025
я прошел все модули джавараш кто начал проходит советую не бросать так как здесь показывают низкоуровневые реализации программы это очень важно для дальнейшего изучения и понимания и изучите паттерны проектирования для понимания примерно как реализованы фреймворки и библиотеки
Олег Сычев Уровень 4
10 мая 2025
Паттерны проектирования будут в курсе?
Hack Уровень 32
11 мая 2025
да фабрика, синглтон, команда, фабричный метод, абстрактная фабрика, прокси, декоратор, фасад
Олег Сычев Уровень 4
11 мая 2025
Спасибо!)
13 Уровень 35
20 мая 2025
🫡
@itArarat Уровень 32
7 февраля 2026
мы же решали задачи где были патерны ты не замечал ?
Alexander Pavlyuchenko Уровень 8
9 февраля 2026
Спасибо за совет. А что такое паттерны? (Неловко маленько спрашивать), и какие источники посоветуешь?
20 февраля 2026
Паттерн - это что-то вроде готового решения самых распространенных задач.
Grigoryvvv Уровень 26 Expert
4 сентября 2026
Паттерн - это шаблон
Anonymous #463526 Уровень 7
18 апреля 2025

class Clock implements Runnable
{
public void run()
{
while (true)
{
Thread.sleep(1000);
System.out.println("Tik");

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