boolean isCurrentThreadInterrupted = Thread.currentThread().isInterrupted();
String threadName = Thread.currentThread().getName();
try {
while (!isCurrentThreadInterrupted) {
System.out.println("Объект " + sharedResource + ", нить " + threadName);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
}
я думаю, что run запускается один раз и соответственно boolean isCurrentThreadInterrupted и String threadName должны присваиваться по одному разу на каждый поток, но в цикле идет проверка isCurrentThreadInterrupted, как поток завершается, если isCurrentThreadInterrupted принимает значение до цикла?
Или по InterruptedException завершается, тогда зачем проверка !isCurrentThreadInterrupted?
Артем Горин
29 уровень
Решил, но вопросы остались
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артем ГоринSoftware Developer в noname
11 января 2022, 07:42
while (!isCurrentThreadInterrupted) не завершиться никогда по условию, а
while (!current.isInterrupted()) завершиться
0
Anonymous #2942293
11 января 2022, 07:59
Ну да. Выйдет программа по InterruptedException
0
Anonymous #2942293
11 января 2022, 07:30
Так потоки же выполняются в параллель.
Рассмотрим следующий пример (он в конце лекций в допах):
При запуске ты к основному треду (в main) добавляешь новый. И они уже идут в параллель. Новый пойдет в run() и будет там "гулять", а старый (main) продолжит последовательно выполнять команды из main.
Как только основной (в main) тред проснется он вызовет interrupt у твоего объекта с новым потоком, и clock.run() выйдет из цикла.
Ну и соответственно вывод в консоль:
Вроде как-то так
0