2010-05-13 12 views
5

मुझे जो चाहिए वह शटडाउन जैसा ही है, लेकिन उसके बाद नए कार्य सबमिट करने में सक्षम हो। मेरे ThreadPoolExecutor मेरे प्रोग्राम निष्पादन के दौरान कार्यों की एक यादृच्छिक संख्या स्वीकार करेगा।जावा - ThreadPoolExecutor चल रहे कार्यों को रद्द करें

+1

क्या विकल्प मौजूदा निष्पादक सेवा को बंद करने और इसे एक नए से बदलने के लिए मौजूद होगा? – tylermac

उत्तर

8

आप प्रत्येक सबमिशन के भविष्य को पकड़ सकते हैं, संग्रह में भविष्य को स्टोर कर सकते हैं, फिर जब आप कार्यों को रद्द करना चाहते हैं, तो सभी कतारबद्ध कार्यों के भविष्य.cancel() को आमंत्रित करें।

इस समाधान के साथ निष्कर्ष अभी भी चल रहा है और किसी भी चल रहे कार्यों को रद्द कर दिया गया है या यदि वे पंक्तिबद्ध हैं तो नहीं चलेंगे।

+0

धन्यवाद, मेरा एकमात्र प्रश्न आपके समाधान संग्रह के आकार के बारे में थे क्योंकि मेरे ThreadPoolExecutor को असीमित कार्य प्राप्त होंगे। लेकिन एक मानचित्र और ओवरराइटिंग सबमिट करें और बाद में निष्पादित करें मैं अपने संग्रह को केवल चल रहे कार्यों के साथ ही बनाए रख सकता हूं। – rgomesf

0

अपने व्यवहार को प्रदर्शित करने वाले ExecutorService क्यों नहीं बनाते?

0

getQueue() विधि पर एक नज़र डालें। मुझे पूरा यकीन है कि यह समाशोधन काम करेगा (हालांकि परीक्षण नहीं किया गया)।

+1

GetQueue() केवल कतार में कार्यों को साफ़ कर सकता है। पहले से चल रहे कार्यों के साथ कुछ भी नहीं कर सकता .. – rgomesf

-1

क्या यह केवल getQueue() करने के लिए पर्याप्त नहीं है और इसे साफ़ करें? यदि आपको वास्तव में चल रहे कार्यों को रोकने का प्रयास करने की आवश्यकता है, तो आपको ThreadPoolExecutor को उप-वर्ग करना होगा और अनिवार्य रूप से shutdownNow() को फिर से कार्यान्वित करना होगा, लेकिन केवल उस बिट को कॉपी करें जो प्रत्येक थ्रेड में बाधा भेजता है। आपको याद है कि यह अभी भी कोई गारंटी नहीं है कि आप वास्तव में उन्हें तुरंत बंद कर देंगे और आगे की गणना नहीं करेंगे। यदि आपको ऐसा करने की ज़रूरत है तो आपको एक पूरी तरह से अलग दृष्टिकोण की आवश्यकता होगी।

+0

मैंने पहले से ही shutdownNow() को फिर से कार्यान्वित करने का प्रयास किया है, लेकिन कुछ चर निजी हैं, और उनके बिना मैं जो भी चाहता हूं वह नहीं कर सकता ... – rgomesf

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