جاوا میں ہم وقت سازی: کیا ، کیسے اور کیوں؟



جاوا میں مطابقت پذیری سے متعلق یہ مضمون ملٹی تھریڈ پروگراموں کو ہم وقت سازی کرنے کے بارے میں جاننے کے ل. آپ کی راہ میں رہنمائی کرنے میں مدد کرے گا۔

ملٹی تھریڈ پروگرام باقاعدگی سے ایسے حالات کے ساتھ آ سکتے ہیں جہاں متعدد مواقع ہوں اسی وسیلہ پر جانے کی کوشش جو دھوکہ دہی اور چونکانے والے نتائج پیدا کرتی ہے۔ جاوا میں ہم وقت سازی کا استعمال کرکے اسے حل کیا جاسکتا ہے۔ صرف ایک مخصوص دھاگے کے وسائل کو وقت کے ایک مقررہ مقصد پر حاصل کیا جاسکتا ہے۔ یہ مضمون آپ کی ہم وقت سازی کی حکمت عملی سے واقف ہونے میں مدد کرے گا۔

میں اس ترتیب میں عنوانات پر گفتگو کروں گا:





آو شروع کریں!

جاوا میں ہم وقت سازی کیوں استعمال کریں؟



اگر آپ کسی پروگرام کے اندر کم از کم دو دھاگوں سے شروعات کرتے ہیں تو ، ایک موقع ہوسکتا ہے جب متعدد موضوعات اسی وسائل کو حاصل کرنے کی کوشش کریں۔ یہ حتمی مسائل کی وجہ سے غیر متوقع نتیجہ بھی پیدا کرسکتا ہے۔

نحو :

نام کی جگہ c ++ کیا ہے؟
مطابقت پذیری (اعتراض کی شناخت) enti // مشترکہ متغیرات اور دیگر مشترکہ وسائل تک رسائی حاصل کریں}

مثال کے طور پر، مساوی فائل میں لکھنے کی کوشش کریں۔ یہ ڈیٹا کو خراب کرسکتا ہے کیونکہ ایک تھریڈ ڈیٹا کو اوور رائڈ کر سکتا ہے یا جب کوئی تھریڈ کھول رہا ہےایک ہی فائل میں ایک ہی وقت میں ، دوسرا تھریڈ اسی فائل کو بند کر رہا ہوسکتا ہے۔ایک سے زیادہ تھریڈز کا عمل ہم آہنگ کرنے کی ضرورت ہے۔ یہ کسی تصور کے نام سے نافذ کیا جاسکتا ہے ایم حملہ آور .



  • ہر ایک ایک مانیٹر کے ساتھ وابستہ ہے ، جسے تھریڈ لاک یا لاک کرسکتا ہے۔
  • ایک وقت میں صرف ایک ہی دھاگے مانیٹر پر تالا لگا سکتا ہے۔
  • جاوا پروگرامنگ لینگویج تھریڈز بنانے اور ان کے کام کو سنکرونائز کرنے کا ایک بہت ہی آسان طریقہ فراہم کرتی ہے ہم وقت ساز بلاکس
  • یہ مشترکہ وسائل کو بھی اس مخصوص بلاک میں رکھتا ہے۔

جاوا میں مطابقت پذیر بلاکس کو نشان زد کیا گیا ہے ہم وقت ساز مطلوبہ الفاظ جاوا میں یہ بلاک کسی نہ کسی شے پر مطابقت پذیر ہے۔وہ تمام بلاکس جو ایک ہی شے پر مطابقت پذیر ہوتے ہیں ان کے اندر ایک وقت میں صرف ایک ہی تھریڈ چل سکتا ہے۔ مطابقت پذیری بلاک میں داخل ہونے کی کوشش کرنے والے دوسرے تمام دھاگوں کو اس وقت تک بلاک کردیا جاتا ہے جب تک مطابقت پذیر بلاک کے اندر کا تھریڈ بلاک سے باہر نہ نکل جائے۔

ہم وقت سازی کی اقسام

مطابقت پذیری کی دو قسمیں دستیاب ہیں۔ وہ ہیں:

  1. عمل مطابقت پذیری: ریاست تک پہنچنے کے لئے متعدد دھاگوں یا عمل کی بیک وقت عمل درآمد تاکہ وہ عمل کے ایک خاص تسلسل پر پابند ہوں۔
  2. تھریڈ مطابقت پذیری: ایک اوقات میں جب ایک سے زیادہ دھاگےمشترکہ وسائل تک رسائی حاصل کرنے کی کوشش کرتا ہے ، آپ کو یہ یقینی بنانا ہوگا کہ وسائل صرف ایک تھریڈ کے ذریعہ استعمال ہوں گےایک وقت.

آئیے ہم ان اقسام کی تفصیلات میں شامل نہیں ہوں گے اور یہ سمجھنے کی کوشش کریں کہ کیا تالے ہیں .

جاوا میں تالے

جیسا کہ میں نے پہلے ذکر کیا ، ہم وقت سازی داخلی ہستی کے ارد گرد تعمیر کی جاتی ہے جسے بطور جانا جاتا ہے لاک یا مانیٹر کریں . ہر چیز کا اس سے وابستہ لاک ہوتا ہے۔ لہذا ایک دھاگے جس میں کسی چیز کے کھیتوں تک مستقل رسائی کی ضرورت ہوتی ہے اس تک رسائی حاصل کرنے سے پہلے آبجیکٹ کا لاک حاصل کرنے کی ضرورت ہوتی ہے ، اور پھر جب کام ہو جاتا ہے تو اس لاک کو جاری کردیں۔

جاوا 5 سے ، java.util.concurrent.locks پیکیج میں بہت سے لاک عمل ہیں۔

اس طرح ایک تالا لگتا ہے:

پبلک کلاس لاک {نجی بولین ہےلاک = غلط عوامی ہم وقت سازی باطل لاک () میں خلل پڑتا ہے {جبکہ (isLock) {انتظار ()} isLock = true} عوامی ہم وقت سازی باطل انلاک () L isLock = غلط مطلع ()}}

لاک () کا طریقہ تالہ مثال سے تالا لگا دیتا ہے تاکہ لاک () کو کال کرنے والے تمام تھریڈز اس وقت تک بلاک ہوجاتے ہیں جب تک کہ انلاک () پر عملدرآمد نہ ہوجائے۔

ہم وقت سازی کے بغیر ملٹی تھریڈنگ

یہاں ایک سادہ سی مثال ہے جو ایک تسلسل میں کاؤنٹر کی قیمت کو پرنٹ کرتی ہے اور جب بھی ہم اسے چلاتے ہیں تو ، یہ ایک دھاگے میں سی پی یو کی دستیابی پر مبنی ایک مختلف نتیجہ پیدا کرتا ہے۔ اس کو دیکھو!

کلاس ملٹی ٹریڈ {پبلک باطل پرنٹکونٹ () {کوشش کریں {کے لئے (INT i = 5 i)<0 i--) { System.out.println('Counter --- ' + i ) } } catch (Exception e) { System.out.println('Thread interrupted.') } } } class Thread extends Multithread { private Thread t private String threadName Multithread MT Thread( String name, Multithread mt) { threadName = name MT= mt } public void run() { MT.printCount() System.out.println('Thread ' + threadName + ' exiting.') } public void start () { System.out.println('Starting ' + threadName ) if (t == null) { t = new Thread (this, threadName) t.start () } } } public class TestThread { public static void main(String args[]) { Multithread MT = new Multithread() Thread t = new Thread( 'Thread - 1 ', MT) Thread t1 = new Thread( 'Thread - 2 ', MT) t.start() t1.start() // wait for threads to end try { t.join() t1.join() } catch ( Exception e) { System.out.println('Interrupted') } } }

اس میں مندرجہ بالا پروگرام کے نتائج:

جاوا- ایڈوریکا میں آؤٹ پٹ - ہم آہنگی

ہم وقت سازی کے ساتھ ملٹی تھریڈنگ

یہ اوپر کی طرح کی ایک ہی مثال ہے لیکن یہ تسلسل میں انسداد قیمت پرنٹ کرتی ہے۔ جب بھی ہم اسے چلاتے ہیں ، وہ ایک ہی نتیجہ پیدا کرتا ہے۔

(ملٹی i = 5 i> 0 i--) {System.out.println ('کاؤنٹر ---' + i)}} کیچ (استثنا ای) {سسٹم کے لئے ملٹی ٹریڈ کلاس {پبلک باطل پرنٹ کاونٹ () {کوشش کریں۔ out.println ('تھریڈ میں خلل پیدا ہوا۔')}}} کلاس تھریڈ میں ملٹی تھریڈ {نجی تھریڈ ٹی نجی سٹرنگ تھریڈ نام ملٹی تھریڈ ایم ٹی تھریڈ (سٹرنگ کا نام ، ملٹی ٹریڈ MT) {تھریڈ نام = نام MT = mt} عوامی باطل رن () nch مطابقت پذیر ( ایم ٹی) T ایم ٹی.پرنٹکونٹ ()} System.out.println ('تھریڈ' + تھریڈنیام + 'باہر جارہا ہے۔')} عوامی باطل شروع () {System.out.println ('شروع کرنا' + تھریڈنیام) اگر (t == null) {t = new Thread (یہ ، تھریڈنیام) t.start ()}}} پبلک کلاس ٹیسٹ تھریڈ {عوامی جامد باطل اہم (سٹرنگ آرگس []) ult ملٹی ٹریڈ MT = نیا ملٹی ٹریڈ () تھریڈ T = نیا تھریڈ ('تھریڈ) - 1 '، ایم ٹی) تھریڈ T1 = نیا تھریڈ (' تھریڈ - 2 '، ایم ٹی) T.start () T1.start () // تھریڈز ختم ہونے کا انتظار کریں {T.join () T1.join ()} کیچ (مستثنیٰ ای) {System.out.println ('مداخلت')}}}

پیداوار کو ذیل میں دکھایا گیا ہے:

مطابقت پذیر کی ورڈ

مطابقت پذیر مطلوبہ الفاظ بلاک یا کسی طریقے کو ایک اہم حص marksہ کی نشاندہی کرتا ہے۔ ایک اہم حص isہ ہے جہاں ایک وقت میں صرف ایک ہی دھاگے پر عملدرآمد ہو رہا ہے ، اور دھاگے میں مطابقت پذیر حصے کے لئے تالا لگا ہوا ہے۔ یہ ہم وقت ساز کلیدی لفظ تحریری شکل میں مدد کرتا ہے بیک وقت کسی بھی درخواست کے کچھ حصے۔ یہ بلاک میں مشترکہ وسائل کی بھی حفاظت کرتا ہے۔

مطابقت پذیر مطلوبہ الفاظ کے ساتھ استعمال کیا جاسکتا ہے:

جاوا میں سٹرنگ کو ڈیٹ فارمیٹ میں تبدیل کریں

آئیے کوڈ بلاک پر بات کرتے ہیں۔

مطابقت پذیر مطلوبہ الفاظ: ایک کوڈ بلاک

نحو

مطابقت پذیری بلاک لکھنے کے لئے عمومی ترکیب یہ ہے:

ہم وقت ساز (لوک آبجیکٹ) {// ہم وقت ساز بیانات}

جب کوئی تھریڈ بلاک کے اندر مطابقت پذیر بیانات پر عملدرآمد کرنا چاہتا ہے تو اسے لاک او آبجیکٹ کے مانیٹر پر لاک حاصل کرنا ضروری ہے۔ ایک وقت میں صرف ایک تھریڈ لاک آبجیکٹ کا مانیٹر حاصل کرسکتا ہے۔ لہذا دوسرے تمام دھاگوں کو اس وقت تک انتظار کرنا ہوگا جب تک کہ اس وقت عمل درآمد کرنے والا تھریڈ لاک کو حاصل نہیں کرلیتا ہے اور اس کا اطلاق مکمل نہیں کرتا ہے۔
اس طرح ، ہم وقت ساز کلیدی لفظ اس بات کی ضمانت دیتا ہے کہ ایک وقت میں صرف ایک ہی دھاگے مطابقت پذیر بلاک کے بیانات پر عملدرآمد کرے گا ، اور اس طرح اس بلاک کے اندر موجود مشترکہ اعداد و شمار کو خراب کرنے سے متعدد تھریڈز کو روکتا ہے۔

نوٹ :

  • اگر تھریڈ سویا ہوا ہے تو (استعمال کرکے) نیند () طریقہ) پھر یہ تالا جاری نہیں کرتا ہے۔ نیند کے اس وقت کے دوران ، کوئی دھاگے مطابقت پذیر بلاک بیانات پر عمل نہیں کرے گا۔
  • جاوا کی ہم وقت سازی پھینک دے گی NullPointerException اگر تالا آبجیکٹ استعمال ہوتا ہے ‘۔ مطابقت پذیر (تالا) ‘کالعدم ہے۔

اب ، اس کے طریقہ کار پر تبادلہ خیال کریں۔

مطابقت پذیر مطلوبہ الفاظ: ایک طریقہ

نحو

لکھنے کے لئے عمومی نحو ہم وقت ساز طریقہ ہے:

مطابقت پذیر طریقہ (پیرامیٹرز) {// مطابقت پذیر کوڈ}

یہاں لاک آبجیکٹ صرف اس چیز کا حوالہ ہے جس کا لاک مانیٹر سے وابستہ ہے جو مطابقت پذیر بیانات کی نمائندگی کرتا ہے۔

ونڈوز کے لئے بہترین جاوا آئیڈیا

مطابقت پذیر بلاک کی طرح ، ایک تھریڈ کو مطابقت پذیر طریقہ کے ساتھ منسلک مانیٹر آبجیکٹ پر لاک حاصل کرنا ضروری ہے۔ مطابقت پذیر طریقہ کی صورت میں ، لاک آبجیکٹ یہ ہے:

  • ‘.کلاس’ اعتراض - اگر دیا ہوا طریقہ ہے جامد .
  • ‘یہ’ اعتراض - اگر طریقہ ہے غیر مستحکم . ‘یہ’ موجودہ شے کا حوالہ ہے جس میں مطابقت پذیری کا طریقہ کار طلب کیا گیا ہے۔

جاوا کی مطابقت پذیری والا مطلوبہ لفظ ہے دوبارہ داخل ہونا قدرت میں. اس کا مطلب یہ ہے کہ اگر مطابقت پذیری کا طریقہ دوسرا مطابقت پذیر طریقہ کو کال کرتا ہے جس میں ایک ہی تالا کی ضرورت ہوتی ہے ، تو موجودہ تھریڈ جس میں تالا لگا ہوا ہے وہ اس تالے کو حاصل کیے بغیر داخل ہوسکتا ہے۔

آئیے ہم اس مضمون کے آخری موضوع کی طرف آگے بڑھیں اور ہم وقت سازی شدہ مطلوبہ الفاظ اور ہم آہنگی کے بلاک کے مابین بڑے فرق کی نشاندہی کریں۔

مطابقت پذیر مطلوبہ الفاظ اور مطابقت پذیری بلاک کے درمیان فرق

  • جب آپ a کے ساتھ ہم وقت سازی مطلوبہ الفاظ استعمال کرتے ہیں طریقہ ، یہ پورے طریقہ کار کے لئے اعتراض میں ایک تالا حاصل کرتا ہے۔ اس کا مطلب ہے کہ کوئی دوسرا تھریڈ مطابقت پذیری کا کوئی طریقہ استعمال نہیں کرسکتا جب تک کہ موجودہ دھاگہ جس میں طلب کیا گیا ہے اس کا نفاذ ختم ہوجائے۔
  • ہم وقت ساز بلاک مطابقت پذیری مطلوبہ الفاظ کی وضاحت کے بعد صرف قوسین کے درمیان آبجیکٹ میں ایک لاک حاصل کرلیا جاتا ہے۔ اس کا مطلب یہ ہے کہ کوئی دوسرا تھریڈ پہلے ہی مقفل شدہ شے پر تالا حاصل نہیں کرسکتا جب تک کہ بلاک کے باہر نہ آجائے۔ لیکن دوسرے دھاگے باقی کوڈ تک رسائی حاصل کرنے میں کامیاب ہوں گے جو اس طریقہ کار میں موجود ہے۔

یہ ہمارے اس مضمون کے اختتام تک پہنچا ہے جہاں ہم نے تبادلہ خیال کیا ہے کہ جاوا میں مطابقت پذیری کس طرح کام کرتی ہے۔ امید ہے کہ اس سبق کے ساتھ جو کچھ آپ کے ساتھ شیئر کیا گیا ہے اس کے ساتھ آپ صاف ہیں۔

چیک کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کا نیٹ ورک موجود ہے۔ ہم آپ کے سفر کے ہر قدم میں آپ کی مدد کرنے کے لئے یہاں موجود ہیں ، اس جاوا انٹرویو سوالات کے علاوہ بننے کے ل a ، ہم ایک نصاب تیار کرتے ہیں جو طلباء اور پیشہ ور افراد کے لئے تیار کیا گیا ہے جو جاوا ڈویلپر بننا چاہتے ہیں۔

ہمارے لئے ایک سوال ہے؟ برائے کرم اس کا ذکر جاوا میں ہم وقت سازی کے تبصرے سیکشن میں کریں ' مضمون اور ہم جلد از جلد آپ کے پاس واپس آئیں گے۔