Смотрел сейчас видео Алишева и решил у себя протестировать данный код из его примера.
Потом поставил volatile. Казалось бы, volatile должен исправить данную проблему. Но ничего не изменилось, все равно бывают проскоки. Почему так? Я что-то не совсем понимаю как работает данное ключевое слово.
public class Test1 {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
Scanner scanner = new Scanner(System.in);
scanner.nextLine();
myThread.shutdown();
}
}
class MyThread extends Thread {
private volatile boolean running = true;
@Override
public void run() {
while (running) {
System.out.println("Hello");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void shutdown() {
this.running = false;
}
}
Сначала не ставил volatile на переменную running. Позапускал несколько раз. Были такие выводы в консоль. Я нажимал enter и вывод все равно продолжался. По второму нажатию прекращался.
