Rewan Hosny Mahmod Hassan نشر 19 مارس 2022 أرسل تقرير نشر 19 مارس 2022 (معدل) انا بحاول اعمل producer consumer use multithreading in java المغروض اعمل اي لما ال queue يكون full و اعمل اي لما الqueue يكون empty تم التعديل في 19 مارس 2022 بواسطة شرف الدين2 توضيح العنوان 1 اقتباس
0 شرف الدين حفني نشر 19 مارس 2022 أرسل تقرير نشر 19 مارس 2022 من المفترض عندما يكون 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 اقتباس
السؤال
Rewan Hosny Mahmod Hassan
انا بحاول اعمل producer consumer use multithreading in java المغروض اعمل اي لما ال queue يكون full و اعمل اي لما الqueue يكون empty
تم التعديل في بواسطة شرف الدين2توضيح العنوان
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.