أولاً ، ألقِ نظرة على حالة تشغيل كل مرحلة من مراحل سلسلة Java التي تعمل
الخيط هو كيان في عملية ، وهو الوحدة الأساسية التي يتم جدولةها بشكل مستقل وإرسالها من قبل النظام. العملية مع المواضيع الأخرى التي تنتمي إلى نفس العملية. يمكن لخيط واحد إنشاء مؤشر ترابط آخر والتراجع ، ويمكن تنفيذ مؤشرات ترابط متعددة في نفس العملية بشكل متزامن. بسبب القيود المتبادلة بين المواضيع ، تظهر الخيوط متقطعة أثناء التشغيل.
في أنظمة التشغيل التي تقدم مؤشرات الترابط ، عادة ما تستخدم العمليات كوحدة أساسية لتخصيص الموارد ، وتستخدم مؤشرات الترابط كوحدة أساسية للتشغيل المستقل والجدولة المستقلة. نظرًا لأن المواضيع أصغر من العمليات ولا تملك بشكل أساسي موارد النظام ، فإن النفقات العامة في الجدولة ستكون أصغر بكثير ، والتي يمكن أن تحسن بشكل أكبر من درجة التنفيذ المتزامن بين برامج متعددة في النظام ، وبالتالي تحسين استخدام موارد النظام وإنتاجية بشكل كبير.
المواضيع هي عملية تحكم متسلسلة واحدة في البرنامج. تشغيل مؤشرات ترابط متعددة في وقت واحد في برنامج واحد لإكمال أعمال مختلفة ، تسمى MultiThreading.
يستخدم Multithesply بشكل أساسي لتوفير وقت وحدة المعالجة المركزية والاستفادة منه.
تتمثل Multithreading في إكمال مهام متعددة في وقت واحد ، وليس تحسين الكفاءة التشغيلية ، ولكن لتحسين كفاءة استخدام الموارد لتحسين كفاءة النظام. يتم تنفيذ المواضيع عند إكمال مهام متعددة في نفس الوقت.
هناك طريقتان لتنفيذ متعدد الخيوط في جافا
1. ورث فئة الخيط
2. تنفيذ واجهة Runnable
ما هي النقاط المشتركة لهاتين الطريقتين:
بغض النظر عن الطريقة التي يتم استخدامها ، يجب عليك استخدام مؤشر ترابط (إذا كان فئة فرعية مؤشر ترابط ، واستخدمها بنفسها) لإنشاء مؤشر الترابط ، ثم استدعاء طريقة Start ().
الاختلافات بين الطريقتين:
1. عيب واحد في فئة سلسلة الرسائل الموروثة هو الميراث الفردي ، في حين أن تطبيق الواجهة القابلة للتشغيل يعوض عن أوجه القصور ، ويمكن تحقيق الميراث المتعدد.
2. إذا ورثت فئة مؤشرات الترابط ، إذا قمت بإنشاء كائن مثيل قابل للتشغيل ، فيجب عليك إنشاء كائنات مثيلات متعددة ، ثم استخدم مؤشر ترابط لإنشاء مؤشرات ترابط متعددة ؛ هذا الفئة ثم استخدام هذا المثيل. أي أن مشاركة الموارد تتحقق
بناءً على النقطتين أعلاه ، يوصى باستخدام الطريقة الثانية
ما يلي مثال لتوضيح
البرنامج 1:
حزمة com.dr.runnable1 ؛ /إذا كنت لاستخدام multithreading ، يجب أن يكون لديك جسم طريقة public void run () {// printout لـ (int i = 0 ؛ i <10 ؛ i ++) {system.out.println (this.name+"--- -> Run ،،،، ") ؛}}} Demo1 {public static void main (String args []) {// الطريقة الأولى R1 = new MyThread (" Thread A ") (Thread B ") ؛ ) ؛ طرق // mythread mt1 = new MyThread ("thread a") ؛ // mythread mt2 = new MyThread ("thread b") ؛ // myThread mt3 = new myThread ("thread c") ؛ // mt1.start () ؛ // mt1.Start () ؛ // يمكن أن يبدأ الموضوع مرة واحدة // mt2.start () ؛ // mt3.start () ؛نتائج تشغيل البرنامج هي:
هذا يرث فئة مؤشرات الترابط ، والطريقة الأولى تنشئ كائنات مثيلات متعددة قابلة للتشغيل ، ثم تستخدم مؤشر ترابط لإنشاء مؤشرات ترابط متعددة
الطريقة الثانية هي أنه نظرًا لأن هذه الفئة قد ورثت فئة مؤشرات الترابط ، فيمكنها استخدامها مباشرة لإنشاء مؤشرات ترابط متعددة.
البرنامج 2:
package com.dr.runnable1 ؛ class mythread1 تنفذ runnable {private int ticket = 10 ؛ out .println ("ticket ----->"+(this.ticket--)) ؛ ::::::::::::::::::::::::: :::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::: :::::::::: (MT) ؛نتائج تشغيل البرنامج:
يقوم هذا البرنامج بتنفيذ Runnable ، ويقوم بإنشاء فئة من كائنات المثيل ، ثم يستخدم مؤشر ترابط لإنشاء مؤشرات ترابط متعددة.