Взагалі є в лекції 17 приклад c
volatile
, там сказано, якщо у змінної isCancel
не використовувати volatile
то змінюючи значення цієї змінної з іншої нитки інші про нього не дізнаються, я переписав приклад, тільки в методі run
відбувається виведення імені потоку і значення isCancel
і вийшло так, що незалежно від того, чи стоятиме у змінної volatile
чи не буде, значення все одно змінюється для всіх потік, хоч стукніть але я заплутався остаточно, якщо з синхронізацією я розібрався, то з я volatile
заплутався і не можу його ніяк застосувати. Може я якось не так приклад створив? Я пробував ще створити клас Clock
і успадкувати від Thread
, а main
створити два екземпляри і обидва запустити, так само volatile
не працював, допоможіть інакше я зійду сума )
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();
}
}
}
}
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ