الغرض من اتصال الخيط هو تمكين المواضيع من إرسال إشارات إلى بعضها البعض. بالإضافة إلى ذلك ، يمكن أن يتسبب اتصال مؤشر الترابط أيضًا في انتظار مؤشر الترابط لإشارات من مؤشرات الترابط الأخرى. على سبيل المثال ، يمكن للمعلومات B انتظار إشارات من الموضوع A ، والتي يمكن أن تكون إشارة إلى أن مؤشر الترابط A قد تمت معالجته وإكماله.
انتظر () الطريقة
- مقاطعة تنفيذ الطريقة ، وجعل هذا الموضوع ينتظر ، والتخلي مؤقتًا عن الحق في استخدام وحدة المعالجة المركزية ، والسماح لخيوط أخرى باستخدام طريقة التزامن هذه
طريقة الإخطار ()
-يمكنك الانتظار في نهاية معينة من موضوع الانتظار بسبب استخدام هذا الطرف المتزامن
طريقة الإخطار ()
استيقظ جميع المواضيع في انتظار نهاية الانتظار بسبب استخدام طريقة التزامن هذه
متى تستخدم طريقة الانتظار
عند استخدام متغير في طريقة التزامن المستخدم بواسطة مؤشر ترابط ، ويجب تعديل هذا المتغير بواسطة مؤشرات ترابط أخرى لتلبية احتياجات هذا الموضوع ، ثم يمكنك استخدام طريقة Wait () في طريقة التزامن
هنا سوف آخذ مثالًا في الفصل كمثال لوصف دور الانتظار والإخطار بإيجاز
نحن نعلم بالفعل أنه في سلسلة متعددة ، مثل بيع التذاكر ، يكون ترتيب التذاكر المباعة في كل نافذة عشوائية. إذا كان لدينا اثنين من تذكرة بيع النوافذ ، فسيتم النص على أنه يجب بيع 100 تذكرة بدورها. بعد بيع تذكرة واحدة في النافذة A ، يجب بيع التذكرة التالية عن طريق النافذة B. كيف يمكننا تنفيذ هذه الوظيفة؟
بادئ ذي بدء ، أعتقد أنه إذا كان يمكن ضبط البيان. إذا كان (i ٪ 2 == 0) ، فإن الموضوع 1 يعمل ، وإلا يدير الخيط 2 ، ولكن يتم تشغيل تشغيل الخيط 1 والخيط 2 عشوائيًا ، ولا يمكن تحديده لتحديد من يدير بحجم i.
ثم يمكننا استخدام Wait () وإخطار () في الموضوع
بعد الانتهاء من الموضوع 1 ، انتظر لحظة ، ثم يتم تشغيل الموضوع 2 ، وبعد انتهاء الموضوع 2 ، ثم استيقظ الخيط 1 ثم مرة أخرى
بعد الانتهاء من الموضوع 1 ، انتظر لحظة ، ثم يتم تشغيل الموضوع 2 ، وبعد الانتهاء من الموضوع 2 ، ثم استيقظ الخيط 1
وبهذه الطريقة ، يمكن تشغيل الموضوع 1 والخيط 2 بدوره
لقد طبعنا 10 أرقام كأمثلة لكتابة برنامج ، وقمنا ببناء ما مجموعه فئتين myPrint و MyPrinttest
myprint.java
الفئة العامة myPrint تنفذ runnable {private int i = 0 ؛ override public void run () {try {print () ؛} catch (interruptedException e) {// tod interruptedException {بينما (i <10) {system.out.println (thread.currentThread (). getName ()+":"+i) ؛ i ++ ؛ etreify () ؛ try {wait () ؛} catch (interruptedException e) {E.PrintStackTrace () ؛}}}}}}}}}}تظهر النتائج في الشكل
يمكنك أن ترى أنه تم تنفيذ مؤشر الترابط 1 والخيط 2 للطباعة بالتناوب مع بعضهما البعض.
فقط فهم عملية التشغيل
بينما (i <10) {system.out.println (thread.currentTheread ().عندما أقوم <10 ، قم بطباعة الموضوع 1 ثم قم بإجراء الاستيقاظ. نظرًا لعدم وجود موضوع في المقدمة ، لم يتم تنفيذ هذه الخطوة. ثم الموضوع 1 ينتظر. بعد تنفيذ الموضوع 2 ، يستيقظ الخيط السابق ، أي الموضوع 1 ، ثم يطبع الموضوع 1 ،
تستمر هذه العملية حتى تنفجر الحلقة ، حتى نتمكن من أداء الدورات
لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول مناقشة دور الانتظار والإخطار في اتصال الخيط. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!