الانتظار بكفاءة على قائمة العقود الآجلة
عند التعامل مع قائمة العقود الآجلة، فإن الهدف هو الانتظار حتى الانتهاء أو حدوث استثناء في أي مستقبل. يمكن أن يؤدي النهج الساذج الذي يتضمن استدعاءات فردية لـ f.get() إلى انتظار غير ضروري في حالة حدوث استثناء مبكرًا.
تجنب الانتظار غير الضروري مع خدمة CompletionService
لمعالجة هذا المشكلة، يتم تشغيل فئة CompletionService. فهو يسمح بتنفيذ المهام غير المتزامنة واسترداد نتائجها بطريقة آمنة عندما تصبح متاحة. وإليك كيفية استخدامه:
Executor executor = Executors.newFixedThreadPool(4);
CompletionService completionService = new ExecutorCompletionService(executor);
// Submit tasks to the service
for (int i = 0; i () {
@Override
public SomeResult call() {
// Task logic here
return result;
}
});
}
int received = 0;
boolean errors = false;
// Loop until all tasks are complete or an error occurs
while (received resultFuture = completionService.take(); // Blocks if nothing available
try {
SomeResult result = resultFuture.get();
received ;
// Process result here
} catch (Exception e) {
// Log error
errors = true;
}
}
// Consider canceling remaining tasks if an error occurred
باستخدام نهج CompletionService، يمكنك مراقبة اكتمال المهام في الوقت الفعلي وإيقاف المزيد من المعالجة في حالة حدوث خطأ، وبالتالي تجنب الانتظار غير الضروري.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3