Всем привет!При решении задачи я пользовался лекцией Остановить бушующий поток: неофициальная версия и подсказками, так как логику задачи я понял не сразу.
Правильно ли я описал логику работы программы?(см. комментарии)
Кроме того,мне не ясно, зачем переменную finish нужно помечать ключевым словом volatile?
package com.javarush.task.task16.task1619;
/*
А без interrupt слабо?
Разберись, как работает программа.
Сделай так, чтобы в методе ourInterruptMethod можно было сделать так, чтобы нить TestThread завершилась сама.
Нельзя использовать метод interrupt
*/
public class Solution {
public static volatile boolean finish = false; // переменная finish станет равной true,когда ourInterruptMethod() завершится
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(new TestThread());// запускаем главную нить Thread и дочернюю TestThread
t.start(); // будет работать вечно без ourInterruptMethod();
Thread.sleep(3000);
ourInterruptMethod();// ждем 3 секунды и подаем часам сигнал на завершение через ourInterruptMethod()
}
public static void ourInterruptMethod() {
finish = true; // когда переменная finish станет равное true ourInterruptMethod завершится
}
public static class TestThread implements Runnable {
public void run() {
while (!finish) {// если переменная finish=false , метод run() завершится
try {
System.out.println("he-he"); //пишем в консоль 2 раза в секунду "he-he", пока переменная finish=false;
Thread.sleep(500)
} catch (InterruptedException e) {
}
}
}
}
}