اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

من المفترض عندما يكون queue ممتلئ , يقوم الproducer بالإنتظار حتى يتم تفريغ بعض البيانات منه, وعندما يكون فارغًا ينتظر الconsumer حتى يتم إضافة بيانات فيه, ولكن يمكنك تنفيذ كل ذلك تلقائيًا عبر إستخدام الصنف BlockingQueue والذي يُوفر التكنيك الذي تم ذكره بشكلٍ أوتوماتيكي ويمكن توضيح الأمر عبر المثال التالي 

class Producer implements Runnable 
{
  protected BlockingQueue<Object> queue;
 
  Producer(BlockingQueue<Object> theQueue) {
    this.queue = theQueue;
  }
 
  public void run() 
  {
    try
    {
      while (true) 
      {
        Object data = readData();
        queue.put(justProduced);
      }
    } 
    catch (InterruptedException ex) 
    {
      System.out.println("Producer INTERRUPTED");
    }
  }

}

إن لاحظت فلم نقوم هنا بوضع أي شروط للتأكد من أن الqueue ليس متتلئ, وذلك لأن عند محاولة نداء الدالة put في حالة إمتلاء الqueue سيتم إرغام الthread على الإنتظار حتى يتوفر مساحة في queue وبعدها يتم تنفيذ الدالة put

وذلك مثال على الconsumer 

class Consumer implements Runnable 
{
  protected BlockingQueue<Object> queue;
 
  Consumer(BlockingQueue<Object> theQueue) {
    this.queue = theQueue;
  }
 
  public void run() {
    try
    {
      while (true) 
      {
        Object obj = queue.take();
      }
    } 
    catch (InterruptedException ex) 
    {
      System.out.println("CONSUMER INTERRUPTED");
    }
  }
 
}

إن لاحظت أيضًا هنا لم نقم بوضع شروط عن ما إذا كان الqueue فارغ وذلك لأن بالمثل عند نداء الدالة get في حالة الqueue الفارغ يتم إرغام الthread على الإنتظار حتى يتم وضع بيانات في الqueue 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...