पल मैं निर्वाहक उपयोग कर रहा हूँ में:
Executors.newSingleThreadExecutor ();
लेकिन मेरी समस्या यह है कि यदि मैं इसे बहुत सारे कार्य करता हूं, तो वे बहुत धीरे-धीरे निष्पादित होते हैं और मेरी UI लटकी जाती है, जबकि निष्पादक कार्य करता है। तो मैं इसे व्यवहार करना चाहता हूं, कि निष्पादक केवल एक समय में कार्य पर ही कार्य करता है। लेकिन जब कोई नया कार्य प्रस्तुत किया जा रहा है, मैं उसे पंक्तिबद्ध काम छोड़ने के लिए अगर वहाँ अधिक से अधिक 5 चाहते हैं।
कि संभव है?
निष्पादकों # newSingleThreadExecutor
बस ThreadPoolExecutor
के प्रत्यक्ष इन्स्टेन्शियशन है, जो आपको अधिक कॉन्फ़िगरेशन विकल्प देता है के लिए एक सुविधा है। आप एक ThreadPoolExecutor
कॉन्फ़िगर कर सकते हैं किसी एकल थ्रेड और एक निश्चित लंबाई कतार उपयोग करने के लिए, और यह एक हैंडलर जो यह नियत है कि कतार की सामग्री है जब आप एक नया कार्य, कुछ इस तरह प्रस्तुत खारिज कर दिया जाना चाहिए देना :
नई ThreadPoolExecutor (1, 1, // एकल थ्रेड 30, TimeUnit.SECONDS, // टाइमआउट, देख जावाडोक नई LinkedBlockingQueue (1), // क्षमता 1 नया ThreadPoolExecutor.DiscardOldestPolicy साथ कतार () // कतारबद्ध कार्य की खातिर जब कोई नया आता है);
यहां महत्वपूर्ण भाग को निश्चित-आकार कतार (1, इस मामले में), और अस्वीकृति हैंडलर तर्क है:
को अस्वीकार कर दिया कार्यों के लिए एक हैंडलर जो सबसे पुराना अनियंत्रित अनुरोध को रद्द करता है और फिर निष्पादित करने की कोशिश करता है
No comments:
Post a Comment