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

ماذا يجب أن أفعل في حالة كان الطابور ممتلئًا أو فارغًا في producer-consumer model جافا

Rewan Hosny Mahmod Hassan

السؤال

انا بحاول اعمل producer consumer use multithreading in java المغروض اعمل اي لما ال queue يكون full و اعمل اي لما الqueue يكون empty 

تم التعديل في بواسطة شرف الدين2
توضيح العنوان
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...