سؤال

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

هل كانت مفيدة؟

المحلول

ال ExecutorService يحتوي الفصل على طريقتان فقط لهذا: اغلق() و إيقاف التشغيل () ().

بعد استخدام طريقة إيقاف التشغيل () ، يمكنك الاتصال Awaittermination () لحظر حتى اكتملت جميع المهام البدء. يمكنك حتى توفير مهلة لمنع الانتظار إلى الأبد.

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

نصائح أخرى

Executor.Shutdown () مع AwaitTermination (مهلة) لا تقتل المواضيع. (أي) ، إذا كانت مهمتك القابلة للتشغيل داخل حلقة الاقتراع ، فإنها لا تقتل المهمة. كل ما تفعله هو مقاطعة مهامها القابلة للتشغيل عند الوصول إلى المهلة. لذلك ، في رمز الفصل الخاص بك ، إذا انتظرت بعض الشرط ، فقد ترغب في تغيير الشرط على أنه ،

while (flagcondition && !Thread.currentThread().isInterrupted()) {}

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

try {
    // do some stuff and perform a wait that might throw an InterruptedException
} catch (InterruptedException e) {
    flagcondition = false;
}

قد ترغب أيضًا في استخدام Profiler لدراسة سبب عدم الانتهاء من بعض المواضيع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top