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

كيفية إيقاف تشغيل Java ExecutorService بشكل صحيح؟

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

How to Properly Shut Down Java ExecutorService Executors?

إيقاف تشغيل Java ExecutorService بشكل رائع

يعد المنفذون طريقة ملائمة لإدارة وتنفيذ المهام بشكل متزامن في تطبيقات Java. ومع ذلك، يمكن أن يؤدي إيقاف التشغيل غير الصحيح إلى سلوك غير متوقع أو مشكلات في الأداء. يقدم هذا الدليل شرحًا تفصيليًا لكيفية إيقاف تشغيل ExecutorService بشكل صحيح، مما يضمن إنهاء جميع المهام أو إلغائها.

فهم ExecutorService Shutdown

تقدم ExecutorService طريقتين أساسيتين لإيقاف التشغيل. :

  • shutdown(): يمنع إرسال المهام الجديدة مع السماح بإكمال المهام الحالية.
  • shutdownNow(): المحاولات لإيقاف كافة المهام قيد التنفيذ والانتظار، وإرجاع قائمة بالمهام غير المجهزة.

من المهم ملاحظة أن إيقاف التشغيل ليس مضمونًا لإنهاء جميع المهام. قد تظل المهام التي تفشل في الاستجابة للمقاطعات أو التي لديها عمليات طويلة الأمد نشطة.

إجراء إيقاف التشغيل الموصى به

تقترح وثائق Oracle النهج التالي لإيقاف التشغيل بسلاسة:

void shutdownAndAwaitTermination(ExecutorService pool) {
    pool.shutdown();
    try {
        // Wait for existing tasks to terminate
        if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
            pool.shutdownNow();
            // Wait for tasks to respond to cancellation
            if (!pool.awaitTermination(60, TimeUnit.SECONDS))
                System.err.println("Pool did not terminate");
        }
    } catch (InterruptedException ie) {
        pool.shutdownNow();
        Thread.currentThread().interrupt();
    }
}

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

if (!pool.awaitTermination(60, TimeUnit.SECONDS))

بـ

while (!pool.awaitTermination(60, TimeUnit.SECONDS))

لمتابعة انتظار اكتمال المهمة.

ملخص طرق إيقاف التشغيل

  • shutdown(): يتوقف عن قبول المهام الجديدة ولكنه يسمح بإكمال المهام الحالية.
  • shutdownNow(): يوقف جميع المهام المنفذة والمنتظرة، ويعيد المهام غير المجهزة .
  • awaitTernation(مهلة طويلة، وحدة TimeUnit): الحظر حتى تكتمل جميع المهام، أو تنتهي المهلة، أو تتم مقاطعة الخيط الحالي.
بيان الافراج أعيد طبع هذه المقالة على: 1729725790 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3