إيقاف تشغيل Java ExecutorService بشكل رائع
يعد المنفذون طريقة ملائمة لإدارة وتنفيذ المهام بشكل متزامن في تطبيقات Java. ومع ذلك، يمكن أن يؤدي إيقاف التشغيل غير الصحيح إلى سلوك غير متوقع أو مشكلات في الأداء. يقدم هذا الدليل شرحًا تفصيليًا لكيفية إيقاف تشغيل ExecutorService بشكل صحيح، مما يضمن إنهاء جميع المهام أو إلغائها.
فهم ExecutorService Shutdown
تقدم ExecutorService طريقتين أساسيتين لإيقاف التشغيل. :
من المهم ملاحظة أن إيقاف التشغيل ليس مضمونًا لإنهاء جميع المهام. قد تظل المهام التي تفشل في الاستجابة للمقاطعات أو التي لديها عمليات طويلة الأمد نشطة.
إجراء إيقاف التشغيل الموصى به
تقترح وثائق 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))
لمتابعة انتظار اكتمال المهمة.
ملخص طرق إيقاف التشغيل
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3