2010-10-24 15 views
6

मैं बहुत सारी छवियों को थ्रेडपूलएक्सएटर के साथ इंटरनेट बनाता हूं।ThreadPoolExecutor में पुराने कतारबद्ध कार्यों को कैसे निकालें और इसके बजाय नए कार्य सम्मिलित करें?

जब नई छवियां पाई जाती हैं, तो मुझे इसे पहले प्रस्तुत करना होगा, उस स्थिति में मैं पुराने कार्यों को त्यागना चाहता हूं जो अभी भी ThreadPoolExecutor में कतारबद्ध हैं और इन नए आइटम को डाउनलोड करने के लिए जोड़ा गया है।

मुझे पता चला कि ThreadPoolExecutor में कोई "स्पष्ट कतार" विधि नहीं है, और "purge" विधि इस तरह के लिए अच्छा नहीं लगता है।

मुझे क्या करना चाहिए?

मैंने अभी इस निष्पादक के "शट डाउन" को कॉल करने और इसे करने के लिए एक नया पुन: बनाने के लिए सोचा, यह सुनिश्चित नहीं है कि यह उचित है या नहीं।

उत्तर

4

ThreadPoolExecutor में remove() विधि है। आप इसका उपयोग getQueue() के साथ कर सकते हैं या अपने स्वयं के संग्रह Runnable एस को कतार में रख सकते हैं और हटाने की आवश्यकता हो सकती है। यदि आप अपना खुद का संग्रह रखते हैं, तो कुछ मेचिनिज्म रखना याद रखें जो आपके संग्रह से समाप्त होने पर चलने योग्य को हटा देता है।

7

क्या आपने यह कोशिश की है?

ThreadPoolExecutor pool = .....; pool.remove(task); 

कार्य वह रननेबल है जिसे आप निकालना चाहते हैं।

या यदि आप कतार को साफ़ करना चाहते हैं।

pool.getQueue().clear() 
+0

हालांकि जावाडोक कहता है कि आपको वास्तव में getQueue विधि का उपयोग नहीं करना चाहिए, शायद वह दृष्टिकोण है जिसे आप ओपी के प्रश्न के आधार पर जाना चाहते हैं। –

+0

हां, जावाडोक का कहना है कि getQueue विधि का उपयोग करने का सुझाव नहीं है, मैंने सोचा कि यह एक अच्छा तरीका नहीं है। – virsir

संबंधित मुद्दे