undefined

Задачи на interrupt

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

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

undefined
9
Задача
Java Core,  6 уровень,  10 лекция
Недоступна
Считаем секунды
1. Напиши реализацию метода run в нити Stopwatch (секундомер). 2. Stopwatch должен посчитать количество секунд, которое прошло от создания нити до ввода строки. 3. Выведи количество секунд в консоль.
undefined
18
Задача
Java Core,  6 уровень,  10 лекция
Недоступна
Отсчет на гонках
1. Разберись, что делает программа. 2. Реализуй логику метода run так, чтобы каждую секунду через пробел выдавался отсчет начиная с numSeconds до 1, а потом слово [Марш!] (см примеры). 3. Если нить работает 3.5 секунды или более, прерви ее методом interrupt и внутри нити выведи в консоль слово [Пр
undefined
4
Задача
Java Core,  6 уровень,  10 лекция
Недоступна
Снова interrupt
Создай нить TestThread. В методе main создай экземпляр нити, запусти, а потом прерви ее используя метод interrupt().
undefined
9
Задача
Java Core,  6 уровень,  10 лекция
Недоступна
А без interrupt слабо?
Разберись, как работает программа. Сделай так, чтобы в методе ourInterruptMethod можно было сделать так, чтобы нить TestThread завершилась сама. Нельзя использовать метод interrupt.
undefined
9
Задача
Java Core,  6 уровень,  10 лекция
Недоступна
Один для всех, все - для одного
1. Разберись, как работает программа. 1.1. Обрати внимание, что объект Water - один для всех нитей. 2. Реализуй метод ourInterruptMethod, чтобы он прерывал все нити из threads. 3. В методе run исправь значения переменных: 3.1. isCurrentThreadInterrupted - должна равняться значению метода isInterrup
Комментарии (152)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
"Почему бы и да" 29 уровень
28 марта 2021
Если не получается, советую вдумчиво прочитать топовые комменты из предыдущей лекции: Artur 40 уровень, Tallinn: Класс Thread содержит в себе скрытое булево поле, подобное полю mFinish в программе Incremenator, которое называется флагом прерывания. Установить этот флаг можно вызвав метод interrupt() потока. Проверить же, установлен ли этот флаг, можно двумя способами. Первый способ — вызвать метод bool isInterrupted() объекта потока, второй — вызвать статический метод bool Thread.interrupted(). Первый метод возвращает состояние флага прерывания и оставляет этот флаг нетронутым. Второй метод возвращает состояние флага и сбрасывает его. Заметьте что Thread.interrupted() — статический метод класса Thread, и его вызов возвращает значение флага прерывания того потока, из которого он был вызван. Поэтому этот метод вызывается только изнутри потока и позволяет потоку проверить своё состояние прерывания. В общем, в силу своих способностей понял так, что метод interrupt() это сеттер скрытой булевой переменной isInterrupt (я ее в классе Thread, кстати не нашел. Искал, потому что думал что скрытая означает private). isInterrupted() - это ее геттер, а Thread.interrupted() это одновременно и геттер и сеттер (который и возвращает значение флага - булевого поля и сбрасывает его) Осталось только непонятным как он его сбрасывает. Например если значение false, то он устанавливает его true, или он сбрасывает только значение true до false?
Viktoria D. 30 уровень, Минск
25 марта 2021
Бестолковая лекция, хорошие задачки. Только благодаря им догнала тему.
Ivan 22 уровень, Санкт-Петербург
20 февраля 2021
Как-то удается сдавать задачи, но при этом очень многое остается непонятным.
Павел 26 уровень
29 января 2021
Чтобы завершать run() потока более красиво, можно применять такую конструкцию: while(!isInterrupted()){ try{ Thread.sleep(100); .......................... } catch(InterruptedException e){ interrupt(); // повторно сбрасываем состояние } } >==========<
🦔 Виктор 20 уровень, Москва Expert
18 января 2021
Begemoth 22 уровень, Москва
20 ноября 2020
В задаче "Один для всех, все для одного" проверка переменной isCurrentThreadInterrupted в самом начале метода run() не приведет ни к чему, так как в блоке while() ее значение не будет меняться по ходу программы. Программа корректно работает, потому что Thread.sleep() внутри себя проверяет значение isInterrapted() каждый раз. это легко проверить, добавив вывод в консоль в блоке catch():

        public void run() {
            boolean isCurrentThreadInterrupted = ...;
            String threadName = ...;

            try {
                while (!isCurrentThreadInterrupted)
                {
                    System.out.println("Объект " + sharedResource + ", нить " + threadName);
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                System.out.println("IE");
            }
        }
можно переписать код c условием while(true), и он так же будет работать:

        public void run() {
            String threadName = ...;

            try {
                while (true)
                {
                    System.out.println("Объект " + sharedResource + ", нить " + threadName);
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {}
        }
Черноусов Кирилл 23 уровень, Одесса
10 ноября 2020
после трех месяцев обучения сдаюсь и возвращаюсь работать барменом хочу сказать,что видимо это не мое, но было интересно
Е К 33 уровень, Краснодар
28 октября 2020
Задачу "А без interrupt слабо?" решил глобальной переменной типа boolean класса Solution. Но в процессе решения задался вопросом. Есть ли какой-то флаг или параметр(типа метаданных) для метода, который бы менялся при вызове этого метода не зависимо от каких-либо других параметров??? Идея была использовать этот параметр для метода ourInterruptMethod() вместо создания глобальной переменной... Например если бы у метода было значение - что-то типа hashCode, которое меняется только при вызове метода не зависимо от его сигнатуры и переданных параметров и это была бы переменная с видимостью внутри класса, к которому принадлежит метод. То мы могли использовать это в условии цикла - while(Solution.ourInterruptMethod.hashCode == false) {...} Но такого не нашёл, однако уверен, что оно быть должно... В процессе зато нашёл интересную статью с описанием работы JVM
Artem K. 30 уровень, Москва
22 октября 2020
И на этой лекции обогнал самого себя почему-то бросившего курс полтора года назад... Наверное в тот раз мотивации не хватило)
alex_us 41 уровень, Симферополь
22 октября 2020
Самое приятное как падает постепенно количество людей завершивших задачу. Стимулирует