عام طور پر لیکچر 17 میں c کی ایک مثال موجود ہے
volatile
، اس میں کہا گیا ہے کہ اگر کوئی متغیر isCancel
استعمال نہیں کیا جاتا ہے volatile
، تو اس متغیر کی قدروں کو کسی اور تھریڈ سے تبدیل کرنے سے، باقیوں کو اس کے بارے میں معلوم نہیں ہوگا، میں نے مثال دوبارہ لکھی، صرف طریقہ کار میں run
تھریڈ کا نام اور قدر ظاہر ہوتی ہے isCancel
اور پتہ چلا کہ متغیر کے موجود ہونے volatile
یا نہ ہونے کے لحاظ سے، قدر اب بھی تمام بہاؤ کے لیے تبدیل ہوتی ہے، یہاں تک کہ اگر آپ دستک دیتے ہیں، میں مکمل طور پر الجھن میں ہوں؛ اگر میں ہم وقت سازی کا پتہ لگایا، پھر میں volatile
الجھن میں ہوں اور اسے کسی بھی طرح لاگو نہیں کر سکتا۔ ہوسکتا ہے کہ میں نے مثال کو کسی طرح غلط بنایا ہو؟ میں نے کلاس بنانے کی بھی کوشش کی Clock
اور اس سے inherit 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