package com.javarush.task.task25.task2508;
public class TaskManipulator implements Runnable, CustomThreadManipulator {
Thread thread;
@Override
public void start(String threadName) {
thread = new Thread(this);
thread.start();
thread.setName(threadName);
}
@Override
public void stop() {
if(thread.getName().equals("fifth"))
thread.interrupt();
}
@Override
public void run() {
while (!thread.isInterrupted()) {
System.out.println(thread.getName());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
В соответствии с требованием, stop() пытается остановить последний поток, но почему-то метод interrupt() не срабатывает, либо по какой-то причине while (!thread.isInterrupted()) не видит, что переменная isInterrupted() сменилась на true.
Кроме того, не могу понять, почему прерываются предыдущие 4 потока. По идее они должны продолжать крутиться, мы ведь их нигде не прерывали. Однако названия этих потоков перестают бесконечно выводиться, а выводится бесконечно только название последнего потока
Rodriguez
33 уровень
Почему не срабатывает метод stop()?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артем Divertitto Senior Android-разработчи в United Tech Master
10 августа 2018, 10:47решение
Убери эту строчку
+4
RodriguezExpert
10 августа 2018, 11:01
Спасибо, убрал.
А почему она мешала? Условие ведь соблюдалось.
И почему с этой строчкой первые четыре потока останавливались?
+1
RodriguezExpert
10 августа 2018, 11:03
В условии сказано:
"5. Метод stop должен прерывать последнюю созданную классом TaskManipulator нить."
А так, получается, что мы останавливаем каждую нить, а не только последнюю.
+1