جاوا پروگرامنگ کی زبان بہت مؤثر طریقے سے کام کرتی ہے ایسی ایپلی کیشنز جن کی ضرورت ہوتی ہے کہ کاموں کو ایک دھاگے میں بیک وقت سرانجام دیا جائے۔ کسی بھی درخواست کے لئے ایک ساتھ بڑی تعداد میں تھریڈز کا اجرا کرنا مشکل ہوجاتا ہے۔ لہذا اس مسئلے پر قابو پانے کے ل، ، ایگزیکٹرسروس کے ساتھ آتا ہے جو اسکا سب انٹرفیس ہے . اس مضمون میں ، ہم جاوا میں ایگزیکٹرسروس کی فعالیت پر تبادلہ خیال کریں گے۔ اس بلاگ میں درج ذیل عنوانات ہیں۔
- ایگزیکٹر فریم ورک کیا ہے؟
- جاوا کی مثال میں ایگزیکٹرسروس
- جاوا ایگزیکٹرسروس اطلاق
- ایگزیکٹر سروس استعمال
- چلنے کے قابل بمقابلہ کالبل
- ایگزیکٹر سروس بند
ایگزیکٹر فریم ورک کیا ہے؟
ایک ساتھ ایک یا دو تھریڈ بنانا اور اس پر عمل کرنا کافی آسان ہے۔ لیکن یہ مشکل ہو جاتا ہے جب دھاگوں کی تعداد ایک خاص تعداد میں بڑھ جاتی ہے۔ بڑی ملٹی تھریڈ ایپلی کیشنز میں بیک وقت سیکڑوں تھریڈز چلیں گے۔ لہذا کسی ایپلی کیشن میں تھریڈ تخلیق کو تھریڈ مینجمنٹ سے الگ کرنا مکمل سمجھ میں آتا ہے۔
پھانسی دینے والا a ایپلی کیشن میں دھاگے بنانے اور ان کا انتظام کرنے میں آپ کی مدد کرتا ہے۔ مندرجہ ذیل کاموں میں آپ کی مدد کرتا ہے۔
تھریڈ تخلیق: یہ دھاگے بنانے کے لئے مختلف طریقوں کی فراہمی کرتا ہے جو آپ کی ایپلی کیشنز کو بیک وقت چلانے میں معاون ہوتا ہے۔
تھریڈ مینجمنٹ: یہ تھریڈ لائف سائیکل کو بھی سنبھالتا ہے۔ عملدرآمد کے لئے ٹاسک جمع کروانے سے پہلے اگر تھریڈ فعال ، مصروف یا مردہ ہے تو آپ کو پریشان ہونے کی ضرورت نہیں ہے۔
ٹاسک سبمیشن اور ایگزیکیوشن: ایگزیکٹر فریم ورک تھریڈ پول میں ٹاسک جمع کرانے کے طریقے مہیا کرتا ہے ، اس سے یہ فیصلہ کرنے کا اختیار بھی مل جاتا ہے کہ تھریڈ پر عملدرآمد کیا جائے گا یا نہیں۔
جاوا کی مثال میں ایگزیکٹرسروس
یہ ایگزیکٹر فریم ورک کا ایک ذیلی انٹرفیس ہے جو کسی ایپلی کیشن کے تھریڈ لائف سائیکل کو سنبھالنے کے لئے کچھ خصوصیات کو جوڑتا ہے۔ یہ ایک جمع کرانے کا طریقہ (بھی) فراہم کرتا ہے جو چلانے کے قابل اور کالبل دونوں کو قبول کرسکتا ہے اشیاء.
مندرجہ ذیل مثال میں ، ہم ایک ہی دھاگے کے ساتھ ایک ایگزیکٹر سروس تشکیل دیں گے اور پھر اس دھاگے کے اندر کام کرنے کے لئے ٹاسک پیش کریں گے۔
درآمد java.util.concurrent.ExecutorService درآمد java.util.concurrent.Executors عوامی کلاس کی مثال Example عوامی جامد باطل اہم (سٹرنگ [] آرگس) {System.out.println ('اندر:' + Thread.currentThread (). getName ( )) سسٹم.اٹ.پرنٹ للن ('ایگزیکٹرسروسیس تشکیل دینا') ایگزیکٹرسروس ایگزیکٹوورس سروسز = ایکزیکیٹرز.نیویسینگل ٹریڈ ایکسیکیوٹر () سسٹم آؤٹ.پریٹلن ('رنن ایبل بنانا') رنن ایبل رنن ایبل = () -> {سسٹم آؤٹ.پرنٹ لین ('اندر: '+ Thread.currentThread (). getName ()). System.out.println (' رنن ایبل کے ذریعہ متعین کردہ ٹاسک کو ایگزیکٹوسروسروس کو ارسال کریں ') ایگزیکٹو سروسس.سبمیٹ (چلانے کے قابل)}}
آؤٹ پٹ: اس کے اندر: چلانے کے قابل بنانے کے لئے مین ایگزیکٹرسروسین تخلیق کرنا ، رن رن کے ذریعہ متعین کردہ ٹاسک کو ایگزیکٹو سروسس کے اندر جمع کروائیں: پول-1-تھریڈ -1
اوپر ظاہر کرتا ہے کہ ہم کیسے ایک ایگزیکٹرسروسس تشکیل دے سکتے ہیں اور ایگزیکٹر کے اندر کسی کام کو انجام دے سکتے ہیں۔ اگر کسی ٹاسک کو پھانسی کے لئے پیش کیا جاتا ہے اور اس وقت تھریڈ کسی دوسرے کام کو انجام دینے میں مصروف ہے ، تو جب تک تھریڈ اس پر عملدرآمد کے لئے آزاد نہ ہو تب تک یہ کام قطار میں کھڑے رہے گا۔
جب آپ مذکورہ پروگرام کو چلاتے ہیں تو ، پروگرام کبھی بھی باہر نہیں ہوتا ہے۔ آپ کو اسے صاف طور پر بند کرنے کی ضرورت ہوگی کیونکہ ایگزیکٹر سروس نئے کاموں کو سنتی رہتی ہے۔
جاوا ایگزیکٹرسروس اطلاق
ایگزیکٹرسروس ایک تھریڈ پول سے بہت ملتا جلتا ہے۔ در حقیقت ، java.util.concurrent میں ایگزیکٹرسروس کا نفاذ پیکیج ایک تھریڈ پول کا نفاذ ہے۔ ایگزیکٹر سروس کے java.util.concurrent پیکیج میں درج ذیل نفاذ ہیں:
ThreadPoolExecutor
ThreadPoolExecutor دیئے ہوئے کاموں کو اس کے اندرونی طور پر ایک تھریڈ تھریڈ کا استعمال کرکے انجام دیتا ہے۔
تھریڈ پولیکسیکیوٹر تشکیل دینا
INT کورپول سیز = 5 انٹ میکس پولسائز = 10 لانگ کیپآلائٹ ٹائم = 5000 ایگزیکٹرسیوشیڈ تھری پولسیکیوکیٹر = نیا تھریڈ پول ایکسیکیوٹر (کورپول سیز ، میکسپول سیز ، کیپ آلائیو ٹائم ، ٹائم یونٹ۔ملاسی سیکنڈ ، نیا لنکڈ بلاکنگ کیو ())
شیڈولڈ تھریڈ پولیکسیکیوٹر
java.util.concurrent.ScheduledThreadPoolExecutor ایک ایگزیکٹوسروس ہے جو تاخیر کے بعد چلانے کے لئے یا ہر ایک عملدرآمد کے درمیان وقت کے ایک وقفے کے ساتھ بار بار عملدرآمد کرنے کے لئے کاموں کا شیڈول رکھ سکتا ہے۔
مثال
شیڈولڈ ایکسیکٹرسروسریڈ شیڈول ایکس ایکیٹورسروسیو = ایکزیکیٹرز۔ نیو شیڈیولڈ ٹریڈ پول (5) شیڈولفیوچر شیڈول فیوچر = شیڈول ایگزیکٹرسروسس.سچول (نیا کالبل () {پبلک آبجیکٹ کال () پھانسی سے خارج ہوا {سسٹم.آؤٹ.پریٹلن ('پھانسی')) کو 'UU Time ، 5 کہا جاتا ہے۔ سیکنڈ)
ایگزیکٹر سروس استعمال
ایک ایگزیکٹرسروس کو کام تفویض کرنے کے کچھ مختلف طریقے ہیں۔
پھانسی (چلانے کے قابل)
جمع کروائیں (چلانے کے قابل)
انوائس اے ()
انوکیول آل ()
چلانے کے قابل
جاوا ایگزیکٹوسروس ایگزیکیوٹ (چلنے والا) جاوا.ang.Runnable آبجیکٹ لیتا ہے اور اسے سنجیدگی سے پھانسی دیتا ہے۔
ایگزیکٹرسروس ایگزیکیوٹرسروسیشن = ایکزیکیٹرز۔نیویسینگل ٹریڈ ایکسیکیوٹر () ایگزیکٹرسروس.ایس۔کیچ (نیا رنن ایبل () {پبلک باطل رن () {سسٹم آؤٹ.پرینٹلن ('ایسینکرونس ٹاسک')}}) ایگزیکٹوسروس سروس.شٹ ڈاؤن ()
اجراء رنن ایبل کا نتیجہ حاصل کرنے کا کوئی طریقہ نہیں ہے ، اس کے لئے آپ کو کالبل کا استعمال کرنا ہوگا۔
چلانے کے قابل جمع کروائیں
جاوا ایگزیکٹرسروس جمع کروانے (چلانے کے قابل) طریقہ کار چلانے کے قابل عمل درآمد ہوتا ہے اور آئندہ آبجیکٹ واپس کرتا ہے۔ آئندہ آبجیکٹ کو جانچنے کے لئے استعمال کیا جاسکتا ہے کہ آیا رنن ایبل نے عملدرآمد ختم کردیا ہے۔
مستقبل کا مستقبل = executorService.submit (new رنن ایبل () {عوامی باطل رن () {System.out.println (: asynchronous work ')} future) future.get () // اگر کام صحیح طریقے سے ختم ہو گیا ہے تو کالعدم ہوجاتا ہے۔
کالبل کو جمع کروائیں
جاوا ایگزیکٹرسروس جمع کروانے (کال کرنے کے قابل) طریقہ جمع (چلانے کے قابل) کے مترادف ہے لیکن یہ رنن ایبل کی بجائے جاوا کالبل لیتا ہے۔
مستقبل کا مستقبل = ایگزیکٹرسروس ڈاٹسمٹ (نیا کالبل () {عوامی آبجیکٹ کال () مستثنیٰ پھینک دیتا ہے {System.out.println ('Asynchronous Callable') 'واپسی کالبل نتیجہ'}}) System.out.println ('ਭਵਿੱਖ.get ( ) = 'مستقبل.get ())
آؤٹ پٹ: غیر متزلزل کالبل قابل مستقبل۔جیٹ = کال کرنے کے قابل نتیجہ
انوائس اے ()
انوائس اے (طریق) کالبل قابل اشیاء کا ایک مجموعہ لیتا ہے۔ اس طریقہ کار کو کالعدم کرنے سے کوئی مستقبل واپس نہیں ہوتا ہے ، لیکن کالبل قابل آبجیکٹ میں سے کسی کا نتیجہ لوٹ آتا ہے۔
ایگزیکٹرسروس ایگزیکیوٹرسروسیشن = ایکزیکیٹرز۔ نیوسنگل ٹریڈ ایکسیکیوٹر () سیٹ کریںکالبلز = نیا ہیش سیٹ () کالبلبلس ایڈیڈ (نیا کالبل () {پبلک اسٹرنگ کال () نے استثنا {ریٹرنٹاسک اے '}}) کالبلز.ڈ ڈی (نیا کالبل () {پبلک اسٹرنگ کال () کو مستثنیٰ قرار دیا {ریٹرنٹاسک بی'} la) callables.add (new Callable () {عوامی اسٹرنگ کال () نے استثناء کو پھینک دیا {retreatask C 'St}) سٹرنگ کا نتیجہ = executorService.invokeAny (کالبلز) System.out.println (' نتیجہ = '+ نتیجہ) ایگزیکٹو سروس .شٹ ڈاؤن ()
جب آپ مذکورہ کوڈ کو چلاتے ہیں تو نتیجہ بدل جاتا ہے۔ یہ ٹاسک A ، ٹاسک B وغیرہ ہوسکتا ہے۔
انویک آؤل ()
انویک آؤل () کا طریقہ پیرامیٹرز کے بطور منظور کردہ کالبل قابل اشیاء کو طلب کرتا ہے۔ یہ آئندہ اشیاء کو لوٹاتا ہے جس کا استعمال ہر کالبل کے نفاذ کے نتائج حاصل کرنے کے لئے کیا جاسکتا ہے۔
ایگزیکٹرسروس ایگزیکیوٹرسروسیشن = ایکزیکیٹرز۔ نیوسنگل ٹریڈ ایکسیکیوٹر () سیٹ کریںکالبلز = نیا ہیش سیٹ () کالبلبلز ایڈیڈ (نیا کالبل () {عوامی اسٹرنگ کال () نے استثنیٰ پھینکا {واپسی 'ٹاسک اے' la}) کالبلز.ڈی ڈی (نیا کالبل () {پبلک اسٹرنگ کال () مستثنیٰ ہے {واپسی 'ٹاسک بی'} la) کالبلبلز ایڈیڈ (نیا کالبل () {پبلک اسٹرنگ کال () مستثنیٰ ہے {واپسی 'ٹاسک سی'}}) فہرست فیوچرز = ایگزیکٹرسیوس.یوینیو ویکآل (کالبلز) برائے (مستقبل کا مستقبل: فیوچر). System.out.println ('ਭਵਿੱਖ.get =' + ਭਵਿੱਖ.get ())} ایگزیکٹرسروس.اٹ شٹ ڈاؤن ()
چلنے کے قابل بمقابلہ کالبل
چلانے کے قابل اور کالبل انٹرفیس ایک دوسرے سے بہت ملتے جلتے ہیں۔ کے اعلان میں فرق ظاہر ہے انٹرفیس. دونوں انٹرفیس ایک ایسے کام کی نمائندگی کرتے ہیں جس کو تھریڈ یا ایگزیکٹرسروس کے ذریعہ بیک وقت عمل میں لایا جاسکتا ہے۔
کالبل اعلان:
عوامی انٹرفیس کالبل {عوامی آبجیکٹ کال () مستثنیٰ ہے}
جاری اعلامیہ:
عوامی انٹرفیس چل رہا ہے {عوامی باطل رن ()}
دونوں کے مابین بنیادی فرق یہ ہے کہ کال () کا طریقہ کار کال سے کسی شے کو لوٹ سکتا ہے۔ اور کال () کا طریقہ پھینک سکتا ہے جبکہ رن () طریقہ کار نہیں کرسکتا۔
مثال کے ساتھ انفارمیٹیکا میں XML تبدیلی
کام منسوخ
جب آپ ٹاسک پیش کیا جاتا ہے تو آپ پیش کردہ مستقبل پر صرف منسوخ کرنے والے طریقہ پر کال کرکے ایگزیکٹرسروس کو پیش کردہ ٹاسک کو منسوخ کرسکتے ہیں۔
مستقبل کیکسنل ()
ایگزیکٹر سروس بند
عمل درآمد مکمل ہونے کے بعد بھی تھریڈز کو چلانے سے روکنے کے ل you ، آپ کو ایگزیکٹر سروس بند کردینا چاہئے۔
بند ()
ایک ایگزیکٹر سروس کے اندر دھاگوں کو ختم کرنے کے لئے آپ شٹ ڈاؤن () طریقہ پر کال کرسکتے ہیں۔
ایگزیکٹرسروس.شٹ ڈاؤن ()
یہ ہمارے اس مضمون کے اختتام تک پہنچا ہے جہاں ہم نے سیکھا ہے کہ ہم دھاگے میں کاموں کو انجام دینے کے لئے ایگزیکٹرسروس کا استعمال کیسے کرسکتے ہیں۔ میں امید کرتا ہوں کہ اس سبق کے ساتھ جو کچھ آپ کے ساتھ شیئر کیا گیا ہے اس سے آپ صاف ہیں۔
اگر آپ کو یہ مضمون 'جاوا میں ایگزیکٹو سروس' سے متعلق ملا ہے تو ، چیک کریں ایک قابل اعتماد آن لائن سیکھنے کی کمپنی جس کا نیٹ ورک 250،000 سے زیادہ مطمئن سیکھنے والوں کے نیٹ ورک کے ساتھ پوری دنیا میں پھیل گیا ہے۔
ہم یہاں آپ کے سفر کے ہر قدم میں آپ کی مدد کرنے اور ایک ایسا نصاب تیار کرتے ہیں جو طلباء اور پیشہ ور افراد کے لئے تیار کیا گیا ہے جو جاوا ڈویلپر بننا چاہتے ہیں۔ کورس آپ کو جاوا پروگرامنگ میں آغاز فراہم کرنے اور مختلف اور اعلی درجے کے دونوں جاوا کے تصورات کے لئے آپ کو تربیت دینے کے لئے ڈیزائن کیا گیا ہے پسند ہے ہائبرنیٹ اور .
اگر آپ کو کوئی سوال آتا ہے تو ، بلا جھجھک 'جاوا میں ایگزیکٹرسروس' کے تبصرے سیکشن میں اپنے سارے سوالات پوچھیں اور ہماری ٹیم جواب دینے میں خوش ہوگی۔