"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ما هي الفئة التي تنتمي إليها طرق الانتظار () وإخطار () وإخطار الكل ()؟

ما هي الفئة التي تنتمي إليها طرق الانتظار () وإخطار () وإخطار الكل ()؟

تم النشر بتاريخ 2024-11-01
تصفح:508

Which Class Do the wait(), notify(), and notifyAll() Methods Belong To?

1. فهم طرق الانتظار () والإخطار () وإخطار الكل ().

تعتبر أساليب wait() وnotify() وnotifyAll() جزءًا لا يتجزأ من نموذج التزامن في Java. إنهم ينتمون إلى فئة Object، وهي أصل التسلسل الهرمي للفئة في Java. هذا يعني أن كل فئة في Java ترث هذه الأساليب من فئة Object.

1.1 فئة الكائن

فئة الكائن هي الطبقة الفائقة لجميع الفئات في Java. يوفر مجموعة من الأساليب الأساسية التي ترثها كل فئة، بما في ذلك toString()، equals()، وhashCode(). تعد أساليب wait()، وnotify()، وnotifyAll() أيضًا جزءًا من هذه الفئة، مما يمكّن سلاسل الرسائل من التواصل وتنسيق أنشطتها.

1.2 دور الانتظار () وإخطار () وإخطار الكل ()

  • wait(): تؤدي هذه الطريقة إلى انتظار مؤشر الترابط الحالي حتى يستدعي مؤشر ترابط آخر notify() أو notifyAll() على نفس الكائن. يجب استدعاؤه من داخل كتلة أو طريقة متزامنة.
  • notify(): تعمل هذه الطريقة على تنشيط خيط واحد ينتظر على شاشة الكائن (قفل الخيط). إذا كانت هناك عدة سلاسل رسائل في الانتظار، فسيتم اختيار واحد منها بشكل عشوائي.
  • notifyAll(): تعمل هذه الطريقة على تنشيط كافة سلاسل الرسائل التي تنتظر على شاشة الكائن. يعد هذا مفيدًا عندما يلزم إعلام سلاسل رسائل متعددة بتغيير في الحالة.

2. استخدام الانتظار () وإخطار () وإخطار الكل () في الممارسة العملية

لفهم كيفية عمل هذه الأساليب، دعونا نلقي نظرة على بعض الأمثلة العملية.

2.1 رمز المثال

إليك مثال بسيط يوضح استخدام هذه الطرق:


class SharedResource {
    private boolean available = false;

    public synchronized void consume() throws InterruptedException {
        while (!available) {
            wait(); // Wait until the resource is available
        }
        // Consume the resource
        System.out.println("Resource consumed.");
        available = false;
        notify(); // Notify that the resource is now unavailable
    }

    public synchronized void produce() {
        // Produce the resource
        available = true;
        System.out.println("Resource produced.");
        notify(); // Notify that the resource is available
    }
}

public class Main {
    public static void main(String[] args) {
        SharedResource resource = new SharedResource();

        Thread producer = new Thread(() -> {
            try {
                while (true) {
                    Thread.sleep(1000); // Simulate time to produce
                    resource.produce();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        Thread consumer = new Thread(() -> {
            try {
                while (true) {
                    resource.consume();
                    Thread.sleep(2000); // Simulate time to consume
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        producer.start();
        consumer.start();
    }
}


2.2 النتائج التجريبية

في المثال أعلاه:

  • سيقوم مؤشر ترابط المنتج بإنتاج مورد بشكل دوري وإخطار المستهلك.
  • سينتظر مؤشر ترابط المستهلك حتى يتوفر المورد، ويستهلكه، ثم يخطر المنتج إذا لزم الأمر.

سترى المخرجات التالية التي تشير إلى عمليات المنتج والمستهلك:


Resource produced.
Resource consumed.
...


يوضح هذا الإخراج كيفية تنسيق wait() وnotify() وnotifyAll() للتفاعل بين المنتج والمستهلك.

3.الاستنتاج

من خلال فهم الفئة التي تنتمي إليها أساليب wait()، وnotify()، وnotifyAll() وكيفية عملها، يمكنك الإدارة بفعالية التواصل بين الخيوط في تطبيقات Java الخاصة بك. تعتبر هذه الأساليب ضرورية لضمان تعاون الخيوط ومشاركة الموارد بكفاءة.

إذا كان لديك أي أسئلة أو كنت بحاجة إلى مزيد من التوضيح، فلا تتردد في ترك تعليق أدناه!

اقرأ المزيد من المشاركات على : ما هي الفئة التي تنتمي إليها طرق الانتظار () وإخطار () وإخطار الكل ()؟

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/anh_trntun_4732cf3d299/which-class-dw-the-wait-notify-and-notifyall-methods-belong-to-58bp؟1 إذا كان هناك أي انتهاك ، يرجى الاتصال [email protected] بحذف ذلك.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3