جاوا میں تھریڈ کلاس اور چلنے کے قابل انٹرفیس کے درمیان فرق

مصنف: Laura McKinney
تخلیق کی تاریخ: 1 اپریل 2021
تازہ کاری کی تاریخ: 14 مئی 2024
Anonim
Ethical Hacking Full Course - Learn Ethical Hacking in 10 Hours | Ethical Hacking Tutorial | Edureka
ویڈیو: Ethical Hacking Full Course - Learn Ethical Hacking in 10 Hours | Ethical Hacking Tutorial | Edureka

مواد


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

آئیے ذیل میں دکھائے گئے موازنہ چارٹ کی مدد سے تھریڈ اور رنن ایبل کے درمیان کچھ دوسرے اختلافات دیکھیں۔

  1. موازنہ چارٹ
  2. تعریف
  3. کلیدی اختلافات
  4. نتیجہ اخذ کرنا

موازنہ چارٹ

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


تھریڈ کلاس کی تعریف

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

/ * دھاگے کی وضاحت * / کلاس Mythread دھاگے کی تھریڈ {/ * نوکری * / عوامی باطل رن () {for (int i = 0؛ i <10؛ i ++). System.Out.ln ("چائلڈ تھریڈ") )؛ }} کلاس مین تھریڈ {/ * مرکزی دھاگے کی نوکری * / عوامی جامد باطل اہم (سٹرنگ آرگس) {میتھریڈ ایم ٹی = نیا میتھریڈ ()؛ / * مرکزی دھاگے نے بچوں کا تھریڈ تیار کیا * / mt.start ()؛ (INT i = 0؛ i <10؛ i ++) {سسٹم آؤٹ۔ ("مین تھریڈ")؛ }}} / * آؤٹ پٹ * / مین تھریڈ مین تھریڈ مین تھریڈ اہم تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ مین تھریڈ مین تھریڈ تھریڈ تھریڈ تھریڈ مین تھریڈ مین تھریڈ چولہا تھریڈ تھریڈ تھریڈ مین تھریڈ

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


چلانے کے قابل انٹرفیس کی تعریف

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

/ * دھاگے کی وضاحت * / کلاس رنن ایبل تھریڈ * رنڈ ایبل {/ * تھریڈ کا کام * / عوامی باطل رن () {for (int i = 0؛ i <10؛ i ++) {System.Out.ln ("چائلڈ تھریڈ") )؛ }} کلاس مین تھریڈ {/ * مرکزی دھاگے کی نوکری * / عوامی جامد باطل اہم (سٹرنگ آرگز) {میتھریڈ آر ٹی = نیا میتھریڈ ()؛ / * مرکزی دھاگے نے چلانے کے قابل آبجیکٹ * / تھریڈ ٹی = نیا تھریڈ (آر ٹی) بنایا؛ / * مرکزی دھاگے سے بچے کا تھریڈ پیدا ہوتا ہے اور چلانے کے قابل آبجیکٹ * / t.start ()؛ (INT i = 0؛ i <10؛ i ++) {سسٹم آؤٹ۔ ("مین تھریڈ")؛ }}} / * آؤٹ پٹ * / مین تھریڈ مین تھریڈ مین تھریڈ اہم تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ تھریڈ مین تھریڈ مین تھریڈ تھریڈ تھریڈ تھریڈ مین تھریڈ مین تھریڈ چولہا تھریڈ تھریڈ تھریڈ مین تھریڈ

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

جاوا میں تھریڈ اور چلنے کے قابل کے درمیان اہم اختلافات

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

نتیجہ:

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