به طور کلی، یک مثال c در سخنرانی 17 وجود دارد
volatile
، می گوید که اگر از متغیری isCancel
استفاده نشود volatile
، با تغییر مقادیر این متغیر از یک رشته دیگر، بقیه از آن خبر نخواهند داشت، من مثال را بازنویسی کردم، فقط در روش run
نام thread و مقدار نمایش داده می شود 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();
}
}
}
}
GO TO FULL VERSION