كيفية قتل المواضيع الجميلة في جاوة؟
-
13-09-2019 - |
سؤال
أرغب في قتل الخيوط العالقة في حالة طريق مسدود. أولا، يمكننا كشف معرفات الخيط في حالة طريق مسدود باستخدام findDeadlockedThreads()
طريقة ThreadMXBean
فئة في java.lang.management
.
ثم، أود أن أقتل الخيوط حسب معرفات الخيط، وبالتالي لدي أسئلان ذي صلة:
(1) كيفية التحكم في مؤشر ترابط حسب معرف الصفحات؟
(2) كيفية قتل موضوع محظور؟ أعتقد أن طريقة الإثارة المقاطعة () ستمنح استثناء من الخيط وسيقتل الخيط.
المحلول
من مجموعة Threadgroup الجذر، يمكنك الحصول على فئة مؤشر الترابط تعداد جميع المواضيع قيد التشغيل. وبعد ثم يمكنك الاتصال بالخيط. Stop On The One الذي يطابق معرفك.
بعد أن قال ذلك، هذا أمر خطير للغاية بسبب إمكانية ترك الأشياء في دولة غير متناسقة. لا أعتقد أن طريقة المقاطعة ستتسبب في تحرير مؤشر ترابط عالق في انتظار قفل المزامنة، وبالتالي فإن طرق التوقف (الشر)
أنظر أيضا: "جافا موضوع الإهمال البدائي".
نصائح أخرى
java.util.concurrent.lock.lockinterlasterly () طريقة قابلة للمقاطع، القفل المتزامن الأكثر بكثير غير متزامن ليس كذلك. كما ذكرنا في الوثائق، فإن القدرة على تعداد المواضيع الجماعية مخصصة لها كمساعد تصحيح الأخطاء وليس كوسيلة للتعافي في بيئة الإنتاج.
في الإنتاج، ربما يكون أكثر أمانا للخروج من العملية بأكملها وإعادة التشغيل.
حتى Thread.Stop () غير قادر على إيقاف الخيط الجمود على قفل جوهري.إذا تم حظر مؤشر ترابط في انتظار قفل جوهري، فلا يوجد شيء يمكنك القيام به لإيقافه من التأكد من ضمان حصوله في النهاية على قفل ويجعل التقدم الكافي الذي يمكنك الحصول على اهتمامه بطريقة أخرى بطريقة أخرى. يعمل مع Lock.Lock () من خلال.