جاوا ملٹی ٹریڈنگ پروگرام وسیع پیمانے پر استعمال کے گواہ ہیں کالبل اور مستقبل تھریڈز اور ملٹی تھریڈنگ کے لازمی علم کے تحت ، قارئین اس مضمون میں بحث کو بہتر طور پر سمجھنے کے قابل ہوں گے۔ جیسا کہ میں اس مضمون میں جاوا میں کالبل انٹرفیس کی وضاحت کروں گا۔
- دھاگوں پر بازیافت
- جاوا میں کالبل انٹرفیس کیا ہے؟
- کالبل انٹرفیس کی واپسی
- کالبل اور فیوچر کلاس کی خصوصیات
- کالبل اور چلنے کے قابل طبقات کا موازنہ
دھاگوں پر بازیافت
تاہم ، میں صرف دھاگوں کے تصور کا ایک مختصر تعارف پیش کرتا ہوں۔ تھریڈ عملدرآمد کا ایک الگ راستہ ہے ، اگر آپ کو بار بار کام کرنے کی ضرورت ہو تو ، کام کو ایک سے زیادہ کاموں میں توڑا جاسکتا ہے اور انہیں دھاگوں میں تفویض کیا جاسکتا ہے۔ ملٹی تھریڈنگمتعدد دھاگوں کو متوازی طور پر انجام دینے کے ل multiple متعدد دھاگوں کو تفویض کرنے کے علاوہ کچھ بھی نہیں ہے تاکہ نتیجہ جلد حاصل کیا جا سکے۔
جاوا میں کالبل انٹرفیس کیا ہے؟
جاوا 5 کے لئے ، 'java.util.concurrent' کلاس متعارف کروائی گئی تھی۔ اس کالبل انٹرفیس کو کنکرنسی پیکیج کے ذریعہ لایا گیا تھا جو رنن ایبل انٹرفیس کی طرح لگتا تھا۔ یہ کسی بھی شے کو واپس بھی کرسکتا ہے اور استثناء پھینکنے کے قابل ہے۔ جاوا کالبل انٹرفیس جنرکس کا استعمال کرتا ہے ، اس طرح کسی بھی قسم کی آبجیکٹ کو واپس کرنا ممکن ہوتا ہے۔ ایگزیکٹر فریم ورک تھریڈز کے تالاب میں کالبل قابل عملدرآمد کو انجام دینے کے لئے ایک جمع () طریقہ فراہم کرتا ہے۔ حقیقت میں ، جاوا ایگزیکٹر فریم ورک ورکر ٹریڈ کے نمونوں پر عمل پیرا ہے۔
تھریڈ پول میں صارفین ایگزیکٹرز (نیو فکسڈ ٹریڈ پول) (10) طریقہ استعمال کرکے تھریڈ شروع کرسکتے ہیں اور اسی کے مطابق اس پر ٹاسک جمع کرائیں۔ چلانے کے قابل عمل دھاگے کے ہدف کے طور پر کام کرتا ہے اور اس کام کی وضاحت کے لئے عوامی طور پر باطل رن () طریقہ کار کو لازمی طور پر لاگو کیا جاتا ہے۔ اس کو تھریڈ پول میں تھریڈز کے ذریعہ پھانسی دی جائے گی۔ تالاب میں دھاگوں کی دستیابی کی بنیاد پر ، ایگزیکٹر فریم ورک تھریڈز کو کام (چلانے کے قابل ہدف) تفویض کرتا ہے۔اگر تمام دھاگے استعمال میں ہیں ، تو کام رکنا ہوگا۔ تھریڈ ایک کام کو مکمل کرنے کے بعد پھر تالاب میں بطور دستیاب دھاگہ واپس آجاتا ہے ، جو مستقبل کے کاموں کو قبول کرنے کے لئے تیار ہے۔ کالبل رنن ایبل کی طرح ہے اور جب ہم کام سے کوئی نتیجہ یا حیثیت حاصل کرنا چاہتے ہیں تو کسی بھی قسم کی شے کو واپس کرسکتے ہیں۔
کالبل انٹرفیس کی واپسی
جاوا کالبل java.util.concurrent واپس کرتا ہے۔ جاوا مستقبل مستقبل سے متعلق کالبل ٹاسک کو ختم کرنے کے لئے ایک منسوخ () طریقہ پیش کرتا ہے۔ یہ گیٹ () طریقہ کار کا ایک اوورلوڈ ورژن ہے ، جہاں کوئی نتیجہ کا انتظار کرنے کے لئے ایک خاص وقت بتاتا ہے۔ موجودہ دھاگے سے بچنے کے ل useful مفید ہے ، جسے لمبے عرصے تک روک دیا جاسکتا ہے۔ براہ کرم یاد رکھیں کہ حاصل کرنے کا طریقہ ایک ہم آہنگ طریقہ ہے اور جب تک کہ کال کرنے والا اپنا کام ختم نہیں کرتا ہے اور کوئی قیمت واپس نہیں کرتا ہے ، اس کے لئے کال کرنے کے لئے انتظار کرنا پڑے گا۔
متعلقہ کالبل ٹاسک کی موجودہ حیثیت کو حاصل کرنے کے لئے 'isDone ()' اور 'isCanlled ()' طریقے بھی موجود ہیں۔ اس مثال پر غور کریں جہاں ایک سے 100 تک تمام نمبروں کا ایک مجموعہ تلاش کرنے کی ضرورت ہے۔ ہم ترتیب سے 1 سے 100 لوپ کرسکتے ہیں اور آخر میں ان کو شامل کرسکتے ہیں۔ ایک اور امکان تقسیم اور فتح کا ہے۔ اس طریقہ کار میں ، ہم تعداد کو اس طرح سے گروپ کرسکتے ہیں کہ ہر گروپ کے بالکل دو عنصر ہوں۔ آخر میں ، ہم اس گروپ کو دھاگوں کے تالاب میں تفویض کرسکتے ہیں۔ لہذا ، ہر تھریڈ متوازی طور پر جزوی رقم لوٹاتا ہے اور پھر وہ جزوی رقم جمع کرتا ہے اور پوری رقم حاصل کرنے کے ل add ان میں شامل ہوجاتا ہے۔
کالبل اور فیوچر کلاس کی خصوصیات
کالبل کلاس ایک SAM قسم کا انٹرفیس ہے لہذا اسے لامبڈا اظہار میں لاگو کیا جاسکتا ہے۔
کال کرنے والے طبقے کے پاس صرف ایک طریقہ ہے 'کال ()' جس میں سنجیدگی سے عمل کرنے کے لئے درکار تمام کوڈ موجود ہیں۔
جاوا میں اعداد و شمار کی ساخت اور الگورتھم
چلانے کے قابل انٹرفیس ماحول میں ، گنتی کا نتیجہ واپس کرنے یا جانچ پڑتال کی رعایت کو پھینک دینے کا کوئی امکان نہیں تھا۔ جبکہ کالبل کے ساتھ کوئی قیمت لوٹانی اور جانچ پڑتال کی رعایت پھینکنا دستیاب ہے۔
مستقبل کی کلاس کے حاصل () کا طریقہ کار نتائج مرتب کرنے کے لئے دوبارہ گنتی کے بعد استعمال کیا جاسکتا ہے۔ صارف یہ بھی جانچ سکتے ہیں کہ کیا () طریقہ کار استعمال کرکے حساب کتاب ختم ہو گئی ہے یا نہیں۔
فیوچر۔کینسل () طریقہ استعمال کرکے حساب کو منسوخ کرنا بھی کچھ ایپلیکیشنز میں ایک اعزاز ہے۔
گیٹ () کو بلاکنگ کال کہا جاتا ہے اور یہ اس وقت تک بلاک ہوتا رہتا ہے جب تک کہ حساب کتاب مکمل نہ ہو۔
کالبل اور چلنے کے قابل طبقات کا موازنہ
کالبل | چل رہا ہے |
یہ ایک حصہ ہے “ java.util.concurrent ' جاوا 1.5 کے بعد سے پیکیج | جاوا 1.0 کے بعد سے یہ java.lang پیکیج کا حصہ ہے |
پیرامیٹرائزڈ انٹرفیس ، جیسے کالبل | غیر پیرامیٹرائزڈ انٹرفیس |
چیک شدہ استثناء پھینک دینے کے قابل | یہ چیک شدہ رعایت نہیں پھینک سکتا |
اس میں ایک ہی طریقہ ہے ، کال () ، جو قسم V کو واپس کرتا ہے ، پر مشتمل ہے ، یہ متعین انٹرفیس پیرامیٹر 'ٹائپ' کی طرح ہے | یہاں ، اس میں ایک واحد طریقہ کار ہے ، جسے رن () کہا جاتا ہے ، جو بیکار ہوجاتا ہے |
نیچے جاوا کالبل کلاس کی ایک سادہ سی مثال ہے جس میں عمل درآمد کیا گیا ہے جہاں کوڈ مخصوص دھاگے کا نام لوٹاتا ہے ، جو ایک سیکنڈ کے بعد اس کام کو انجام دے رہا ہے۔ یہاں ہم پیش کردہ کاموں کے نتیجے میں جاوا فیوچر کے متوازی 100 کاموں کو انجام دینے کے لئے ایکسٹریکٹر فریم ورک کا استعمال کرتے ہیں۔ پہلا ٹکڑا پیداوار ہے اور نیچے کوڈ کی نمائندگی کرتا ہے۔
پیکج. .util.concurrent.Executors java.util.concurrent.Fuut عوامی طبقے MyCallable لاگو کالبل ments @ آؤرائیڈ پبلک اسٹرنگ کال () کو پھینک دیتے ہیں استثنا read Thread.sleep (1000) // اس کالنگ ٹاسک پر عملدرآمد کرنے والا تھریڈ نام واپس کریں () .getName ()} عوامی جامد باطل اہم (سٹرنگ آرگس []) {// ایگزیکٹرز کی افادیت طبقے سے ایگزیکٹرسروس حاصل کریں ، تھریڈ پول کا سائز 10 ایگزیکٹرسروسی ایگزیکٹر = ایکزیکیٹرز۔ نیو فکسڈ ٹریڈ پول (10) // مستقبل کے انعقاد کے لئے ایک فہرست بنائیں۔ کالبل لسٹ سے وابستہ آبجیکٹفہرست = نئی ارا لسٹ () // MyCallable مثال بنائیں کالبل کالبل = new MyCallable () for (INT i = 0 i)<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } }
ایگزیکٹر سروسز کو بند کرنا
بہت سے ڈویلپرز جس اہم اور اہم پہلو سے محروم رہتے ہیں وہ ایگزیکٹرسروس کو بند کررہا ہے۔ ایگزیکٹر سروس اہم ہے اور اضافی تھریڈ عناصر کے ساتھ تخلیق کیا گیا ہے۔ یاد رکھیں کہ جے وی ایم صرف اسی وقت رکتا ہے جب تمام غیر ڈییمان تھریڈز روک دیئے جاتے ہیں۔ اس طرح محض پھانسی کی خدمت بند کرنا JVM کو رکنے سے روکتا ہے۔
ایگزیکٹر سروس کو یہ بتانے کے لئے کہ تھریڈز چلانے کی ضرورت نہیں ہے ، ہمیں سروس بند کرنی چاہئے۔
بند پکارنے کے تین طریقے ہیں:
- باطل بند () - یہ ایک منظم بند کا آغاز کرتا ہے جس میں پہلے جمع کروائے گئے کاموں کو انجام دے دیا جاتا ہے ، لیکن کوئی نیا کام قبول نہیں ہوتا ہے۔
- فہرست بند کریں ابھی () - یہ کوشش کرتی ہے کہ سرگرمی سے سرانجام دینے والے تمام کاموں کو روکا جاسکے ، زیر التواء کاموں کی کارروائی روک دی جائے ، اور ان کاموں کی فہرست بھی واپس کردی جائے جو عمل درآمد کے منتظر تھے۔
- باطل انتظار (ختم) - یہ اس وقت تک رکاوٹ بنی رہتی ہے جب تک کہ تمام کام بند ہونے کی درخواست کے بعد عملدرآمد ختم نہیں ہوجاتے ، یا وقت ختم ہوجاتا ہے۔ موجودہ تھریڈ میں خلل پڑنے پر یہ بھی روکتا ہے۔ سب پر منحصر ہے کہ کون سا کام پہلے آتا ہے۔
اس کے ساتھ ، ہم جاوا آرٹیکل میں کالبل انٹرفیس کے اختتام پر پہنچے ہیں۔ مجھے امید ہے کہ آپ کو جاوا میں فیوچر اور کالبل انٹرفیس کے بارے میں سمجھ آگئی ہے۔
چیک کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کے نیٹ ورک ہیں۔ ایڈورکا کا جاوا J2EE اور SOA ٹریننگ اور سرٹیفیکیشن کورس طلباء اور پیشہ ور افراد کے لئے ڈیزائن کیا گیا ہے جو جاوا ڈویلپر بننا چاہتے ہیں۔
ہمارے لئے ایک سوال ہے؟ برائے کرم اس 'جاوا میں کالبل انٹرفیس' بلاگ کے تبصرے سیکشن میں اس کا تذکرہ کریں اور ہم جلد از جلد آپ کے پاس مل جائیں گے۔