الفرق الرئيسي - النوم مقابل الانتظار في Java
النوم والانتظار طريقتان تستخدمان لتعدد مؤشرات الترابط في Java. ينتمي أسلوب السكون إلى فئة مؤشر الترابط بينما يكون أسلوب الانتظار من فئة الكائن. يتمثل الاختلاف الرئيسي بين السكون والانتظار في Java في أنه يتم استخدام السكون لتعليق تنفيذ الخيط الحالي لعدد محدد من المللي ثانية أثناء استخدام طريقة الانتظار للتسبب في انتظار مؤشر الترابط الحالي حتى يستدعي مؤشر ترابط آخر الإخطار أو طريقة notifyAll للكائن.
الخيط هو أصغر وحدة معالجة في نظام التشغيل. وهو عبارة عن تدفق تسلسلي واحد للتحكم داخل البرنامج.الخيوط خفيفة الوزن. تعد خاصية Multithreading آلية تشغيل خيوط متعددة في نفس الوقت. لغات البرمجة مثل Java تدعم تعدد مؤشرات الترابط. يتميز Multithreading بمزايا لأنه يسمح بتشغيل خيوط متعددة في وقت واحد وتكون الخيوط مستقلة عن بعضها البعض. هناك طرق في Java يمكن استخدامها لتعدد مؤشرات الترابط. اثنان منهم ينامون وينتظرون
ما هو النوم في جافا؟
هناك عمليات متعددة تعمل في نظام التشغيل. العملية عبارة عن برنامج قيد التنفيذ. يمكن أن تحتوي كل عملية على مؤشرات ترابط متعددة ، وهناك تبديل سياق يحدث بين سلاسل العمليات هذه. في Java ، توجد طريقتان لإنشاء سلسلة رسائل. وذلك بتوسيع فئة مؤشر الترابط أو بتنفيذ واجهة Runnable. تحتوي فئة مؤشر الترابط على مُنشئين وطرق لإنشاء عمليات وتنفيذها على مؤشر ترابط. تقوم فئة مؤشر الترابط بتوسيع فئة الكائن وتنفيذ واجهة Runnable. يجب أن يتم تنفيذ واجهة Runnable بواسطة أي فئة يتم تنفيذ مثيلاتها بواسطة مؤشر ترابط.عند تنفيذ مؤشر الترابط ، تتم كتابة الكود الذي يجب تنفيذه داخل طريقة التشغيل. يتم تحديد مؤشر الترابط الذي يجب تشغيله بواسطة برنامج جدولة مؤشر الترابط. يتم تشغيل مؤشر ترابط واحد فقط في عملية واحدة.
يمر الخيط بعدة مراحل. بعد إنشاء كائن من فئة Thread ، يمكن للمبرمج استدعاء طريقة البدء. قبل استدعاء هذه الطريقة ، يُقال أن الخيط في الحالة الجديدة. يقوم برنامج جدولة الموضوع بتحديد موضوع للتشغيل. إذا لم يتم تحديد مؤشر الترابط بواسطة برنامج جدولة مؤشر الترابط ولكن إذا تم استدعاء طريقة البدء ، فسيكون مؤشر الترابط في حالة قابلة للتشغيل. بعد أن يحدد برنامج جدولة الخيط الموضوع المراد تنفيذه ، فإنه ينتقل إلى حالة التشغيل. إذا كان مؤشر الترابط على قيد الحياة ولكنه غير مؤهل للتشغيل حاليًا ، فهو في حالة غير قابلة للتشغيل أو محظورة. بعد الانتهاء من طريقة التشغيل ، ينتقل مؤشر الترابط إلى حالة الإنهاء. هذه هي المراحل الرئيسية لدورة حياة الخيط.
هناك طرق مختلفة متاحة في فئة الموضوع لأداء مهام مختلفة.تستخدم طريقة النوم للنوم بهذه الطريقة لفترة محددة من الوقت. بناء جملة طريقة النوم هو النوم العام الفارغ (ملي ثانية طويلة) رميات InterruptException. يؤدي إلى إيقاف تنفيذ مؤشر الترابط الحالي مؤقتًا لعدد محدد من المللي ثانية. إذا قاطع مؤشر ترابط آخر مؤشر الترابط الحالي ، فسيتم مسح حالة مقاطعة مؤشر الترابط الحالي عند طرح هذا الاستثناء.
الشكل 01: برنامج Java مع طريقة السكون
وفقًا للبرنامج أعلاه ، تحتوي طريقة التشغيل على رمز يجب تنفيذه. في البرنامج الرئيسي ، يتم إنشاء كائنين من ExampleThread1 ، ويتم استدعاء طرق البدء عليهما. سيسمح ذلك بتشغيل الكود داخل طريقة التشغيل. يتم تنفيذ مؤشر ترابط واحد فقط في كل مرة. مع الخيط.ينام (1000) ؛ سيسمح للخيط الأول بإنهاء التنفيذ لمدة 1000 مللي ثانية. عندما يكون الموضوع في وضع السكون ، يلتقط جدولة مؤشر الترابط الخيط الآخر.
ما هو الانتظار في جافا؟
قد تصل سلاسل المحادثات المتعددة إلى مورد مشترك. يمكن أن يتسبب في إنشاء مخرجات غير صحيحة. يمكن استخدام مزامنة مؤشر الترابط لإنشاء مؤشر ترابط واحد فقط للوصول إلى المورد المشترك. افترض الموقف على النحو التالي. إذا كان هناك موضوعان مثل t1 و t2 ، فتبدأ t1 في حفظ القيم في ملف نصي يسمى Text1.txt. سيتم استخدام هذه القيم في بعض العمليات الحسابية الأخرى عند إرجاع t1. إذا بدأت t2 قبل إرجاع t1 ، فيمكن لـ t2 تغيير القيم المحفوظة بواسطة t1. يمكن أن يتسبب هذا في أن يقدم t1 ناتجًا خاطئًا. بمساعدة المزامنة ، عندما يبدأ t1 في استخدام ملف Text1.txt ، يمكن قفل هذا الملف ، لذلك لا يمكن الوصول إليه إلا بواسطة t1. لا يمكن لـ t2 تغييره حتى يقوم t1 بتحرير القفل للوصول إلى هذا الملف النصي. عند اكتمال المهمة ، يمكن لـ t1 تحرير القفل. يُعرف القفل أيضًا باسم الشاشة.
يمكن تحقيق مزامنة الموضوع عن طريق الاتصال بين الخيوط. القسم الحرج هو مقطع كود يصل إلى الموارد المشتركة. في الاتصال بين مؤشرات الترابط ، يتم إيقاف تشغيل مؤشر ترابط مؤقتًا في قسمه الحرج ، ويُسمح لمؤشر آخر بالدخول في نفس القسم الحرج ليتم تنفيذه. يتم تنفيذه باستخدام طرق الانتظار والإخطار والإخطار. إنهم ينتمون إلى فئة الكائن. يتم استخدام طريقة الانتظار للسماح لمؤشر الترابط الحالي بتحرير القفل والانتظار حتى يقوم مؤشر ترابط آخر باستدعاء طريقة الإعلام أو الإخطار للكائن. تُستخدم طريقة الإخطار لتنبيه خيط واحد ينتظر القفل. يقوم notifyAll بتنبيه جميع سلاسل الرسائل التي تنتظر القفل.
الشكل 02: فئة الآلة الحاسبة
الشكل 03: الطريقة الرئيسية
تقوم فئة الآلة الحاسبة بتمديد مؤشر الترابط. الكتلة المتزامنة داخل طريقة التشغيل. توجد طريقة الحلقة for والإخطار داخل الكتلة المتزامنة. داخل الطريقة الرئيسية ، تم إنشاء مثيل لمؤشر ترابط وطريقة البدء في هذا المثال. ستنتظر الطريقة الرئيسية حتى يعطي الخيط إشعارًا. عند تنفيذ البرنامج ، تنتظر الطريقة الرئيسية حتى تنفيذ طريقة التشغيل بالكامل وتنتظر طريقة الإخطار. بمجرد استدعاء طريقة الإخطار ، تتوقف الطريقة الرئيسية عن الانتظار وتبدأ في تنفيذ باقي الكود. الرئيسي ينتظر حتى يكتمل مؤشر ترابط الحاسبة. أخيرًا ، تتم طباعة نتيجة المجموع.
إذا لم يكن هناك كتلة متزامنة وإذا كانت الطريقة الرئيسية بها رمز على النحو التالي ، فستعطي الناتج كصفر لأنه لا ينتظر اكتمال السلسلة الأخرى.
آلة حاسبة t1=آلة حاسبة جديدة () ؛
t1. بدء () ؛
System.out.println (t1.sum) ؛
ما هو التشابه بين النوم والانتظار في جافا؟
كل من النوم والانتظار هما طريقتان يمكن استخدامها عند تنفيذ تعدد مؤشرات الترابط في Java
ما هو الفرق بين النوم والانتظار في جافا؟
النوم مقابل الانتظار في Java |
|
تتسبب طريقة السكون في توقف مؤشر الترابط الحالي عن التنفيذ لعدد محدد من المللي ثانية ، مع مراعاة دقة أجهزة ضبط الوقت والجداول الخاصة بالنظام ودقتها. | يتسبب أسلوب الانتظار في انتظار مؤشر الترابط الحالي حتى يستدعي مؤشر ترابط آخر طريقة الإعلام أو الإخطار للكائن. |
اقتران بالقفل | |
لا تحرر طريقة السكون قفل كائن أثناء المزامنة. | تحرر طريقة الانتظار القفل أثناء المزامنة. |
طريقة التنفيذ | |
يتم تنفيذ طريقة السكون على الخيط الحالي. | يتم استدعاء طريقة الانتظار على الكائن. |
فئة مرتبطة | |
النوم هو طريقة لفصل الموضوع | الانتظار هو طريقة لفئة الكائن. |
إتمام | |
تكتمل عملية السكون بعد انتهاء الوقت المحدد. | تتم مقاطعة طريقة الانتظار عن طريق استدعاء طرق notify أو notifyAll |
ملخص - النوم مقابل الانتظار في Java
هناك عمليات متعددة تعمل على نظام التشغيل. يمكن أن تحتوي كل عملية على خيوط متعددة. الخيط هو أصغر وحدة معالجة في نظام التشغيل. تدعم لغة برمجة جافا تعدد مؤشرات الترابط. يسمح بتشغيل خيوط متعددة في وقت واحد. النوم والانتظار طريقتان يمكن استخدامها عند تنفيذ خيوط المعالجة المتعددة. يتمثل الاختلاف بين السكون والانتظار في Java في أنه يتم استخدام السكون لتعليق تنفيذ الخيط الحالي لعدد محدد من المللي ثانية أثناء استخدام طريقة الانتظار للتسبب في انتظار مؤشر الترابط الحالي حتى يستدعي مؤشر ترابط آخر الإخطار أو الإخطار الكل طريقة الكائن.