иллюстрирует изменчивость: является ли этот код потокобезопасным?

Я пытаюсь проиллюстрировать использование и важностьvolatile с примером, который действительно не даст хорошего результата, еслиvolatile был опущен

Но я не очень привык к использованиюvolatile, Идея следующего кода состоит в том, чтобы вызвать бесконечный цикл, еслиvolatile опущен, и быть полностью поточно-ориентированным, еслиvolatile настоящее. Является ли следующий код потокобезопасным? У вас есть какой-нибудь другой реалистичный и короткий пример кода, который используетvolatile и дал бы заведомо неверный результат без него?

Вот код:

public class VolatileTest implements Runnable {

    private int count;
    private volatile boolean stopped;

    @Override
    public void run() {
        while (!stopped) {
            count++;
        }
        System.out.println("Count 1 = " + count);
    }

    public void stopCounting() {
        stopped = true;
    }

    public int getCount() {
        if (!stopped) {
            throw new IllegalStateException("not stopped yet.");
        }
        return count;
    }

    public static void main(String[] args) throws InterruptedException {
        VolatileTest vt = new VolatileTest();
        Thread t = new Thread(vt);
        t.start();
        Thread.sleep(1000L);
        vt.stopCounting();
        System.out.println("Count 2 = " + vt.getCount());
    }
}

Ответы на вопрос(6)

Ваш ответ на вопрос