JavaRush /Курсы /Java Core /Задачи на interrupt

Задачи на interrupt

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

— Привет, Амиго!

9
Задача
Java Core, 6 уровень, 10 лекция
Недоступна
Считаем секунды
1. Напиши реализацию метода run в нити Stopwatch (секундомер). 2. Stopwatch должен посчитать количество секунд, которое прошло от создания нити до ввода строки. 3. Выведи количество секунд в консоль.
18
Задача
Java Core, 6 уровень, 10 лекция
Недоступна
Отсчет на гонках
1. Разберись, что делает программа. 2. Реализуй логику метода run так, чтобы каждую секунду через пробел выдавался отсчет начиная с numSeconds до 1, а потом слово [Марш!] (см примеры). 3. Если нить работает 3.5 секунды или более, прерви ее методом interrupt и внутри нити выведи в консоль слово [Пр
4
Задача
Java Core, 6 уровень, 10 лекция
Недоступна
Снова interrupt
Создай нить TestThread. В методе main создай экземпляр нити, запусти, а потом прерви ее используя метод interrupt().
9
Задача
Java Core, 6 уровень, 10 лекция
Недоступна
А без interrupt слабо?
Разберись, как работает программа. Сделай так, чтобы в методе ourInterruptMethod можно было сделать так, чтобы нить TestThread завершилась сама. Нельзя использовать метод interrupt.
9
Задача
Java Core, 6 уровень, 10 лекция
Недоступна
Один для всех, все - для одного
1. Разберись, как работает программа. 1.1. Обрати внимание, что объект Water - один для всех нитей. 2. Реализуй метод ourInterruptMethod, чтобы он прерывал все нити из threads. 3. В методе run исправь значения переменных: 3.1. isCurrentThreadInterrupted - должна равняться значению метода isInterrup
Комментарии (245)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #463526 Уровень 20
18 апреля 2025
Возможно кому-то поможет понять что вообще происходит такой код:

public class Solution {
    public static volatile int numSeconds = 4;

    public static void main(String[] args) throws InterruptedException {
        RacingClock clock = new RacingClock();
        Thread.sleep(500);
        System.out.println("работает main - 1");
        Thread.sleep(500);
        System.out.println("работает main - 2");
        Thread.sleep(500);
        System.out.println("работает main - 3");
        Thread.sleep(500);
        System.out.println("работает main - 4");
        Thread.sleep(500);
        System.out.println("работает main - 5");
        Thread.sleep(500);
        System.out.println("работает main - 6");
        Thread.sleep(500);
        System.out.println("работает main - 7");
        clock.interrupt();
        if (numSeconds == 0) {
            System.out.println("Марш!");
        }
    }

    public static class RacingClock extends Thread {
        public RacingClock() {
            start();
        }

        public void run() {
            try {
                while (numSeconds != 0) {
                    System.out.println(numSeconds + " ");
                    Thread.sleep(300);
                    System.out.println("работает clock - 1");
                    Thread.sleep(300);
                    System.out.println("работает clock - 2");
                    Thread.sleep(400);
                    System.out.println("работает clock - 3");
                    numSeconds--;
                }
            } catch (InterruptedException ie) {
                System.out.println("Прервано!");
            }
        }
    }
}

Victor Уровень 27
11 апреля 2025
Наверное есть какой-то более правильный способ изучения java (может кто знает?), а эти задачи придуманы просто для развития мозга.
Victor Уровень 27
11 апреля 2025
"Отсчет на гонках" - вот так попроще решение - run такой: try { while(numSeconds != 0) { System.out.print(numSeconds + " "); Thread.sleep(1000); numSeconds--; } } catch (InterruptedException e) { System.out.print(" Прервано!"); } а main - такой: Thread.sleep(3500); clock.interrupt(); if (numSeconds == 0) System.out.print("Марш!");
Дарья Уровень 30
11 февраля 2025
интересная статья на английском про volatile
{Java_Shark} Уровень 36
15 октября 2024
++
NordØne Уровень 34
21 июля 2024
Так тоже принял решение

for(Thread threads : threads){
            threads.interrupt();
        }
Xan Уровень 36
7 ноября 2024
можно так threads.forEach(f -> f.interrupt());
kaidzualex Уровень 5 Expert
3 июня 2024
Странно что в курсе до сих пор не рассказано о параметре у метода join(), в котором передается время в мс. Тогда основной поток будет ждать пока не завершиться дочерний поток, или пока не пройдет указанное время(смотря что произойдет раньше). Еще более странно что валидатор решение через джойны не принимает)
SomeBody098 Уровень 51
6 июня 2024
о, зато вы рассказали, спасибо 😉
Sergey JavaRushovich Уровень 18
7 апреля 2024
вместо циклов лучше использовать стримы также, у коллекций, а именно у их родительского интерфейса Iterable есть метод forEach и туда и туда можно запихать лямбды или вообще схлопнуть до ссылки на метод функционального интерфейса Runnable
Sergey JavaRushovich Уровень 18
7 апреля 2024
интересно, почему в таске "А без interrupt слабо?" не прошло решение через System.exit(0);
Virgilion Уровень 41
28 мая 2024
Если правильно помню, то System.exit(0); - завершает всю программу. А нам нужно только прервать нить, так что проще всего через введение булевой переменной и ее изменение в нужном методе.
Andrei Karavai Уровень 30
18 декабря 2023
В задаче "Отсчет на гонках" я реализовал вывод слова "Прерванно" не в классе "RacingClock", а в методе main. Пришлось для этого использовать несколько булевских переменных в классе RacingClock. Валидатор по итогу решение принял😂 Потом уже посмотрел в образце решения, что вывод слова "Прервано" реализуется в блоке catch (InteruptedException e) {} в самом классе "RacingClock". Если четстно, после прочтения всех предыдущих лекций на эту тему в голове такой вариант решения не возник. Но образец помог понять, как можно сделать. Это было полезно и познавательно.
YUREC Уровень 36
24 февраля 2024
я тоже сначала эту строчку туда прописал, потом подумал а зафиг она там если слип и мне все равно трай кеч делать, а в кеч тоже надо чегото бахнуть