كيفية تشغيل خيوط متعددة بشكل متزامن في Java؟ نهج ExecutorService

نشرت: 2021-10-09
كيفية تشغيل خيوط متعددة بشكل متزامن في Java؟ نهج ExecutorService

دعنا نلقي نظرة على هذا المثال مرة أخرى: كيف تحصل على حالة Ping لأي نقطة نهاية HTTP في Java؟

هل لاحظت تنفيذ الموضوع لهذا المثال؟ إنه متسلسل. What if you have 500 endpoints? أراهن أنه عليك الانتظار لمدة 5 دقائق على الأقل للحصول على نتيجة. وأنا متأكد من أنه ليس الحل الأفضل.

ماذا الآن؟ السؤال الصحيح سيكون:

  • كيف يتم تشغيل خيوط متعددة في نفس الوقت؟
  • كيفية تنفيذ خيوط متعددة في جافا؟
  • كيف أقوم بتشغيل سلاسل رسائل مختلفة في Java؟
  • جافا - أين البرنامج التعليمي لبرمجة تعدد العمليات؟
  • الموضوع: كيفية استخدام خيوط متعددة لتسريع المعالجة؟

ExecutorService Approach هو إجابتك.

المنفذ الذي يوفر طرقًا لإدارة الإنهاء والطرق التي يمكن أن تنتج مستقبلًا لتتبع التقدم في مهمة واحدة أو أكثر من المهام غير المتزامنة.

يمكن إغلاق ExecutorService ، مما يؤدي إلى رفض المهام الجديدة. يتم توفير طريقتين مختلفتين لإغلاق ExecutorService. ستسمح طريقة shutdown() بتنفيذ المهام التي تم إرسالها مسبقًا قبل الإنهاء ، بينما تمنع طريقة shutdownNow() المهام المنتظرة من البدء ومحاولات إيقاف تنفيذ المهام حاليًا.

عند الإنهاء ، لا يوجد لدى المنفذ مهام يتم تنفيذها بنشاط ، ولا توجد مهام تنتظر التنفيذ ، ولا يمكن تقديم مهام جديدة. يجب إغلاق ExecutorService غير مستخدمة للسماح باسترداد مواردها.

يمتد أسلوب الإرسال إلى الطريقة الأساسية Executor.execute ( java.lang.Runnable ) من خلال إنشاء وإرجاع المستقبل الذي يمكن استخدامه لإلغاء التنفيذ و / أو الانتظار حتى الانتهاء. تستدعي الطرق invokeAny invokeAll تؤدي أكثر الأشكال المفيدة شيوعًا للتنفيذ الجماعي ، وتنفذ مجموعة من المهام ثم تنتظر واحدة على الأقل ، أو كلها ، لتكتمل. (يمكن استخدام Class ExecutorCompletionService لكتابة متغيرات مخصصة لهذه الطرق.)

توفر فئة المنفذين طرق المصنع لخدمات المنفذ المقدمة في هذه الحزمة.

  • java - ExecutorService ، كيف تنتظر حتى تنتهي جميع المهام؟
  • دليل إلى Java ExecutorService
  • Java Thread Pool - شرح ExecutorService

يوجد أدناه مثال Java بسيط يشرح usage of ExecutorService .

انتاج:

الآن تحقق من النتيجة.

يجب أن يكون في ثوان فقط. أتمنى أن تجد هذا مفيدا. حاول تشغيل هذا أكثر من مرة وقد ترى نتيجة مختلفة حيث يتم تنفيذ جميع سلاسل الرسائل بالتوازي ومن يحصل على نتيجة سريعة ، سترى النتيجة منشورة في وحدة تحكم Eclipse.

اسمحوا لي أن أعرف عن أي استفسار.