انتظر () وعلم () تابع مباشرة إلى فئة الكائن ، أي أن جميع الكائنات لها هذه الطريقة. يبدو أن هذا أمر لا يصدق في البداية ، لكنه في الواقع طبيعي للغاية ، لأن هذا الزوج من الأساليب يحتاج إلى إطلاق القفل المشغل عند الحظر ، ويتوفر القفل في أي كائن. تسبب حظر الموضوع. تتسبب طريقة الإخطار () في استدعاء أي كائن في كتلة حظر تم اختيارها عشوائيًا في مؤشر ترابط يتم عرقلةها بواسطة طريقة Wait () للكائن (ولكن يمكن تنفيذها حتى يتم قفلها).
ثانياً ، يمكن استدعاء Wait () و Amploy () في أي موضع ، ولكن يجب استدعاء هذا الزوج في الطريقة أو الكتلة المتزامنة. بالطريقة نفسها ، يجب أن يكون القفل على كائن هذا الزوج من الطرق مملوكًا للمعلومات الحالية ، بحيث يمكن إصدار القفل. لذلك ، يجب وضع استدعاء الطريقة في هذه الطريقة أو الكتلة المتزامنة. إذا لم يتم استيفاء هذا الشرط ، على الرغم من أنه لا يزال من الممكن تجميع البرنامج ، فسيظهر inchultymalMonitorsStateException أثناء وقت التشغيل.
تحدد الميزات المذكورة أعلاه من طرق Wait () () أنها تستخدمها في كثير من الأحيان مع الطريقة أو الكتلة المتزامنة. توفر الطريقة أو الكتلة طريقة أو كتلة توفر طريقة أو كتلة مماثلة الأساليب كل ما يعلن متزامن). تمكننا مجموعة من تحقيق سلسلة من خوارزميات التواصل بين التواصل الرائع (مثل خوارزميات كمية الإشارة) على نظام التشغيل واستخدامها لحل مختلف مشاكل الخيط المعقدة.
حول طرق الانتظار () وإخطار () أشرح أخيرًا نقطتين:
أولاً: استدعاء طريقة الإخطار () التي تتسبب في اختيار مؤشر ترابط الحظر بشكل عشوائي من الخيط الذي تم عرقلةه بواسطة طريقة Wait () التي تستدعي الكائن.
ثانياً: بالإضافة إلى الإخطار () ، هناك أيضًا طريقة لإخطار () يمكن أن تلعب أيضًا دورًا مشابهًا. إلى الكائن. بالطبع ، فقط الخيط الذي يحصل على القفل يمكنه إدخال الحالة القابلة للتنفيذ.
الانتظار ذات الصلة وإخطار استخدام العرض التوضيحي:
/** * <pre> * دورة -Thread Cycle 10 مرات ، ثم دورة الخيط الرئيسية 100 مرة ، ثم العودة إلى دورة الفرعية 10 مرات ، * ثم ارجع إلى دورة الخيط الرئيسية 100 مرة ، لذلك 50 مرة * </ presle> * Author ketqi */ public class waitnotifyDemo {public static void main (string [] {for (int i = 1 ؛ i <= 50 ؛ i ++) {business.sub (i) ؛}}). {business.min (i) ؛ e.printStackTrace () ؛}} لـ (int j = 1 ؛ j <= 10 ؛ j ++) {system.out.println ("sub -thread sequence of" + j + "، loop of" + i) ؛ } ismainther = false ؛ int j = 1 ؛ }}ما سبق هو كل محتويات هذه المقالة.