موصى به, 2021

اختيار المحرر

الفرق بين فئة الموضوع و Runnable Interface في Java

يمكن تعريف الخيط بطريقتين. أولا ، من خلال توسيع فئة موضوع التي نفذت بالفعل واجهة Runnable. ثانيا ، من خلال تنفيذ واجهة Runnable مباشرة. عند تعريف مؤشر ترابط بتوسيع فئة مؤشر الترابط لديك تجاوز أسلوب التشغيل () في فئة مؤشر الترابط. عندما تحدد موضوع تنفيذ واجهة Runnable لديك لتطبيق الأسلوب () Runnable الوحيد لواجهة Runnable. الاختلاف الأساسي بين مؤشر الترابط و Runnable هو أن كل مؤشر ترابط يتم تعريفه بواسطة توسيع فئة مؤشر الترابط يقوم بإنشاء كائن فريد ثم يتم إقرانه بهذا الكائن. على الجانب الآخر ، يشارك كل مؤشر ترابط تعريف بواسطة تطبيق واجهة Runnable نفس الكائن.

دعونا نلاحظ بعض الاختلافات الأخرى بين الموضوع و Runnable بمساعدة من الرسم البياني للمقارنة هو مبين أدناه:

رسم بياني للمقارنة

أساس للمقارنةخيطRunnable
الأساسيةكل موضوع يخلق كائن فريد ويقترن به.مؤشرات ترابط متعددة مشاركة الكائنات نفسها.
ذاكرةنظرًا لأن كل مؤشر ترابط ينشئ كائنًا فريدًا ، فستحتاج إلى المزيد من الذاكرة.كما مؤشرات ترابط متعددة مشاركة نفس الكائن يتم استخدام ذاكرة أقل.
تمتدفي Java ، لا يسمح بالوراثة المتعددة ومن ثم ، بعد أن يمتد فصل دراسي من فئة الصنف ، لا يمكنه توسيع أي فئة أخرى.إذا حددت الطبقة موضوع تنفيذ واجهة Runnable فستكون لديها فرصة لتوسيع فصل واحد.
استعماليجب على المستخدم توسيع فئة مؤشر الترابط فقط إذا كان يريد تجاوز الأساليب الأخرى في فئة مؤشر الترابط.إذا كنت ترغب فقط في تخصيص طريقة التشغيل ، فإن تطبيق Runnable هو خيار أفضل.
اقترانيوفر توسيع فئة مؤشر الترابط اقترانًا ضيقًا حيث تحتوي الفئة على تعليمات برمجية لفئة مؤشر الترابط وكذلك المهمة المعينة لمؤشر الترابطتنفيذ واجهة Runnable يقدم اقتران فضفاض كما أن رمز الموضوع هو شكل منفصل من وظيفة المواضيع.

تعريف فئة الموضوع

الخيط هو فئة في حزمة java.lang . فئة مؤشر الترابط يمتد فئة كائن ، ويقوم بتنفيذ واجهات Runnable . تشتمل فئة مؤشر الترابط على بنى وأساليب لإنشاء وتشغيل سلسلة المحادثات. عندما نقوم بإنشاء سلاسل عمليات متعددة ، ينشئ كل مؤشر ترابط كائنًا فريدًا ويكون مرتبطًا بهذا الكائن. إذا قمت بإنشاء مؤشر ترابط توسيع فئة مؤشر الترابط ، لا يمكنك توسيع أي فئة أخرى كما لا يدعم java التوريث المتعدد. لذلك ، يجب عليك اختيار توسيع فئة مؤشر الترابط فقط عندما تريد أيضاً تجاوز بعض الطرق الأخرى من فئة مؤشر الترابط. دعنا نرى مثالاً على إنشاء مؤشر ترابط توسيع فئة مؤشر الترابط.

 / * تعريف مؤشر ترابط * / Class Mythread يمتد مؤشر الترابط {/ * مهمة مؤشر الترابط * / public void run () {for (int i = 0؛ i <10؛ i ++) {System.Out.Println ("مؤشر ترابط التابعة" )؛ }} classHread class {/ * job of main thread * / public static void main (String args []) {Mythread mt = new Mythread ()؛ / * مؤشر الترابط الرئيسي إنشاء مؤشر ترابط التابع * / mt.start ()؛ for (int i = 0؛ i <10؛ i ++) {System.Out.Print ("Main Thread")؛ }}} / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * الموضوع / كاتب الموضوع المشاركة الأخيرة مشاركات المشاهدات الموضوع / كاتب الموضوع الموضوع / كاتب الموضوع المشاركة الاخيرة كاتب الموضوع المنتدى الموضوع / كاتب الموضوع المشاركة الاخيرة مشاركات المشاهدات الموضوع / كاتب الموضوع 

في التعليمة البرمجية أعلاه ، أقوم بإنشاء فئة Mythread تمدد فئة مؤشر الترابط وتجاوز طريقة تشغيل لفئة مؤشر الترابط. في الفئة التي تحتوي على الطريقة الرئيسية أقوم بإنشاء كائن مؤشر ترابط (mt) لفئة Mythread واستخدام كائن مؤشر الترابط استدعاء الأسلوب start (). تبدأ طريقة بدء تنفيذ مؤشر الترابط وفي نفس الوقت استدعاء JVM طريقة تشغيل مؤشر الترابط. الآن هناك نوعان من مؤشرات الترابط في البرنامج مؤشر الترابط الرئيسي واحد و مؤشر ترابط التابعة الثاني إنشاؤها بواسطة مؤشر الترابط الرئيسي. تنفيذ كل من المواضيع يحدث في وقت واحد ، ولكن ، لا يمكن أن نتظاهر الإخراج الدقيق.

تعريف واجهة runnable

Runnable هو واجهة في حزمة java.lang . تنفيذ واجهة Runnable يمكننا تحديد موضوع. تحتوي واجهة runnable على طريقة تشغيل واحدة () ، والتي يتم تنفيذها بواسطة الفئة التي تقوم بتنفيذ واجهة Runnable. عندما تختار تحديد مؤشر ترابط تنفيذ واجهة Runnable لا يزال لديك خيار لتوسيع أي فئة أخرى. عند قيامك بإنشاء سلاسل عمليات متعددة من خلال تطبيق واجهة Runnable ، فإن كل مؤشر ترابط يشترك في نفس مثيل التشغيل. دعونا نتعلم كيفية تحديد موضوع باستخدام واجهة Runnable.

 / * تعريف مؤشر ترابط * / فئة Runnablethread بتنفيذ Runnable {/ * مهمة مؤشر الترابط * / public void تشغيل () {for (int i = 0؛ i <10؛ i ++) {System.Out.Println ("مؤشر ترابط التابعة" )؛ }} classHread class {/ * job of main thread * / public static void main (String args []) {Mythread rt = new Mythread ()؛ / * مؤشر الترابط الرئيسي إنشاء الكائن runnable * / Thread t = new Thread (rt)؛ / * مؤشر الترابط الرئيسي بإنشاء مؤشر ترابط التابعة ثم تمرير الكائن runnable * / t.start ()؛ for (int i = 0؛ i <10؛ i ++) {System.Out.Print ("Main Thread")؛ }}} / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * الموضوع / كاتب الموضوع المشاركة الأخيرة مشاركات المشاهدات الموضوع / كاتب الموضوع الموضوع / كاتب الموضوع المشاركة الاخيرة كاتب الموضوع المنتدى الموضوع / كاتب الموضوع المشاركة الاخيرة مشاركات المشاهدات الموضوع / كاتب الموضوع 

في التعليمات البرمجية أعلاه ، قمت بإنشاء فئة Runnablethread التي تقوم بتنفيذ واجهة Runnable وتحدد وظيفة مؤشر الترابط من خلال تطبيق طريقة التشغيل () للواجهة Runnable. ثم أقوم بإنشاء فصل رئيسي للفصل يحتوي على الطريقة الرئيسية. داخل الأسلوب الرئيسي ، أعلنت عن كائن runnable للفئة Runnablethread وتمرير هذا الكائن إلى منشئ مؤشر الترابط أثناء التصريح لمؤشر ترابط. بهذه الطريقة ، قمت بربط كائن مؤشر الترابط (t) بكائن runnable (rt). ثم استدعاء كائن مؤشر الترابط أسلوب بدء مؤشر الترابط الذي يستدعي تشغيل أسلوب للفئة Runnablethread. إذا لم أقم بربط كائن runnable بكائن مؤشر الترابط ، فإن أسلوب بدء العمليات يجب أن يكون قد استدعى طريقة تشغيل فئة مؤشر الترابط. الآن ، مرة أخرى هناك نوعان من المواضيع في التعليمات البرمجية ، مؤشر ترابط الرئيسي و مؤشر الترابط الرئيسي بإنشاء مؤشر ترابط التابعة كلا الحصول على تنفيذ في نفس الوقت ولكن لا يمكن ابدأ الإخراج الدقيق التظاهر.

الاختلافات الرئيسية بين الموضوع و Runnable في جاوة

  1. ينشئ كل مؤشر ترابط تم إنشاؤه بواسطة توسيع فئة مؤشر الترابط كائن فريد له ثم الحصول على المقترنة هذا الكائن. من ناحية أخرى ، فإن كل ترابط يتم إنشاؤه عن طريق تطبيق واجهة Runnable يشترك في نفس مثيله الحالي.
  2. بما أن كل مؤشر ترابط مقترن بكائن فريد عند إنشائه من خلال توسيع فئة مؤشر الترابط ، فإن هناك حاجة إلى مزيد من الذاكرة. من ناحية أخرى ، فإن كل ترابط يتم إنشاؤه من خلال واجهة التنفيذ Runnable يشترك في نفس مساحة الكائن ، لذا يتطلب ذاكرة أقل.
  3. إذا قمت بتوسيع فئة سلسلة الرسائل إلى أبعد من ذلك ، فيمكنك ترث أي فئة أخرى حيث لا تسمح Java بالوراثة المتعددة في حين أن تطبيق Runnable لا يزال يوفر فرصة لفئة ما لوراثة أي فئة أخرى.
  4. يجب على المرء توسيع فئة مؤشر الترابط فقط إذا كان يجب تجاوز أو تخصيص بعض الطرق الأخرى لفئة مؤشر ترابط. يجب عليك تنفيذ واجهة Runnable إذا كنت ترغب فقط في تخصيص طريقة التشغيل فقط.
  5. يوفر توسيع فئة مؤشر الترابط اقتران ضيق في التعليمات البرمجية كما يتم تضمين رمز مؤشر الترابط ومهمة مؤشر الترابط من نفس الفئة. من ناحية أخرى ، تقدم واجهة تنفيذ Runnable اقترانًا فضفاضًا في التعليمة البرمجية نظرًا لأن شفرة Thread (مؤشر الترابط) مأخوذة من المهمة المعينة لمؤشر الترابط.

استنتاج:

يفضل تطبيق واجهة Runnable بدلاً من توسيع فئة مؤشر الترابط. بما أن تطبيق Runnable يجعل كودك متقاربًا إلى حد كبير لأن رمز سلسلة المحادثات يختلف عن الفئة التي تقوم بتعيين المهمة لمؤشر الترابط. يتطلب ذاكرة أقل ويسمح للفئة أن يرث أي فصل آخر.

Top