Concurrency متقدم

من الإنهاء غير الآمن للخيوط إلى الإلغاء التعاوني

استبدل Thread.stop() والأعلام المشتركة المؤقتة بإلغاء مهام واعٍ بالمقاطعة.

✕ Forced thread termination
Thread worker = new Thread(this::runTask);
worker.start();

// May stop the thread while shared state is inconsistent.
worker.stop();
✓ Future cancellation
Future<?> worker = executor.submit(this::runTask);

// Requests interruption; the task must cooperate.
worker.cancel(true);
هل ترى مشكلة في هذا الكود؟ أخبرنا.
🛡

يحافظ على الثوابت

تتوقف المهام فقط عند مسارات الكود المصممة للإلغاء.

🧩

تحكم موحّد

يمثّل Future التنفيذ والاكتمال والإلغاء معاً.

🔗

قابل للتركيب

تعمل المقاطعة مع قوائم الانتظار المحظورة والأقفال والمنفذات والخيوط الافتراضية.

الأسلوب القديم
Thread.stop()
الأسلوب الحديث
Future.cancel(true)
منذ JDK
5
الصعوبة
متقدم
من الإنهاء غير الآمن للخيوط إلى الإلغاء التعاوني
متاح

تتوفر Future وExecutorService منذ JDK 5 (سبتمبر 2004).

يمكن لـ Thread.stop() إنهاء الكود بينما يمتلك مراقبات (monitors) أو أثناء تحديث حالة مشتركة، مما يترك الكائنات تالفة. الإلغاء الحديث تعاوني: ألغِ الـ Future بالمقاطعة، وانشر InterruptedException حيثما أمكن، واستعد حالة المقاطعة عندما لا يمكن نشرها، وصمّم المهمة للوصول إلى نقاط إلغاء آمنة.