عام طور تي ليڪچر 17 ۾ c جو مثال آهي
volatile
، ان ۾ چيو ويو آهي ته جيڪڏهن هڪ variable isCancel
استعمال نه ڪيو ويو آهي volatile
، ته پوءِ ان variable جي قدرن کي ٻئي ٿريڊ مان تبديل ڪرڻ سان، باقي ان جي باري ۾ ڪا خبر نه پوندي، مون اهو مثال ٻيهر لکيو آهي، صرف. طريقي ۾ 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();
}
}
}
}
GO TO FULL VERSION