JavaRush /Java блог /Random UA /Volatile (приклад у 17 лекції)
dimaMJ
25 рівень
Craiova

Volatile (приклад у 17 лекції)

Стаття з групи Random UA
Взагалі є в лекції 17 приклад c volatile, там сказано, якщо у змінної isCancelне використовувати volatileто змінюючи значення цієї змінної з іншої нитки інші про нього не дізнаються, я переписав приклад, тільки в методі runвідбувається виведення імені потоку і значення isCancelі вийшло так, що незалежно від того, чи стоятиме у змінної volatileчи не буде, значення все одно змінюється для всіх потік, хоч стукніть але я заплутався остаточно, якщо з синхронізацією я розібрався, то з я volatileзаплутався і не можу його ніяк застосувати. Може я якось не так приклад створив? Я пробував ще створити клас Clockі успадкувати від Thread, а mainстворити два екземпляри і обидва запустити, так само volatileне працював, допоможіть інакше я зійду сума ) Volatile (приклад у 17 лекції) - 1
public static void main(String[] args)
    {
       Clock n = new Clock();

        Thread thread1 = new Thread(n);
        Thread thread2 = new Thread(n);
        thread1.start();
        thread2.start();

        try
        {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        n.cancel();

    }

    public static class Clock implements Runnable
    {
        private volatile boolean isCancel = false;

        public void cancel()
        {
            this.isCancel = true;
        }

        @Override
        public void run()
        {
            while (true)
            {

                try
                {   System.out.println(Thread.currentThread().getName()+" "+isCancel);
                    Thread.sleep(2000);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ