2011-10-27 38 views
6

वर्तमान में मैं प्रत्येक अंतराल समय में कुछ फ़ंक्शन निष्पादित करने के लिए टाइमर का उपयोग कर रहा हूं। हालांकि, बाद में जब मैं फ़ंक्शन निष्पादित करने के अंतराल को बदलना चाहता हूं, तो मैं पिछले शेड्यूल को रद्द नहीं कर सकता। यह कैसे हल किया जा सकता है? धन्यवादटाइमर के मौजूदा शेड्यूल को कैसे रद्द करें

+0

आपका क्या मतलब है "मैं पिछले शेड्यूल को रद्द नहीं कर सकता"? क्या आप नहीं जानते कि यह कैसे करें, या यह है कि यह आपके वास्तुकला में फिट नहीं है? – njzk2

+0

मैं पिछले शेड्यूल को रद्द करना चाहता हूं और विभिन्न अंतराल के साथ नया शेड्यूल शुरू करना चाहता हूं। हालांकि, टाइमर के लिए, ऐसा करने का कोई तरीका नहीं है .. इसलिए निराशाजनक – user301

+0

आपको वास्तव में टाइमर को रद्द करना होगा और एक – njzk2

उत्तर

5

timer.cancel() विधि के साथ आप टाइमर और सभी निर्धारित कार्यों को रद्द कर सकते हैं। (API documentation देखें) या आप अपने TimerTask timertask.cancel() पर विधि रद्द कॉल कर सकते हैं आप निर्धारित समय आप TimerTask रद्द करके एक नया TimerTask जोड़ना चाहिए बदलना चाहते हैं (API documentation देखें)

+0

टाइमरटास्क # रद्द करें और फिर टाइमर # शुद्ध() काम नहीं करता है। यह अभी भी चलता है। – JohnyTex

3

आप Timer के बजाय ScheduledThreadPoolExecutor का उपयोग करने में देख सकते हैं।

उपयोग बहुत सीधे आगे है।

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); 

और फिर जब आप एक काम जोड़ना चाहते हैं आप कॉल:: आप एक प्रबंधक का एक उदाहरण बनाने

executor.scheduleAtFixedRate(myRunnable, delay, interval, unit); 

कहाँ myRunnable अपने कार्य को (जो Runnable -interface लागू करता है) है, delay है कार्य को पहली बार निष्पादित करने से पहले, interval पहले निष्पादन के बाद कार्य निष्पादन के बीच का समय है। delay और intervalunit पैरामीटर के आधार पर आश्वस्त हैं, जो टाइमयूनीट हो सकता है। * (जहां * सेकंड्स, मिनट, मिलिसेन्ड्स इत्यादि) है।

तब निष्पादन आप कॉल को रोकने के लिए:

executor.shutdownNow(); 

और फिर आप एक अलग अंतराल के साथ अपने कार्य को फिर से जमा कर सकते हैं।

नोट: आपको अपने कार्य को पुनः सबमिट करने से पहले निष्पादक का नया उदाहरण बनाने की आवश्यकता हो सकती है, लेकिन मुझे पूरा यकीन नहीं है कि क्यों।

+0

टाइमर से अलग कैसे है? – njzk2

+0

यह लिंक आपको मतभेदों के बारे में थोड़ा बताता है: http://www.dremsus.com/index.php/2011/03/why-scheduledthreadpoolexecutor-for-smartfoxserver-2x/ स्टैक ओवरफ्लो पर यह प्रश्न मतभेदों को संबोधित करता है: http: //stackoverflow.com/questions/409932/java-timer-vs-executorservice – kaspermoerch

+0

वैसे भी है कि मुझे निष्पादक को बंद करने या टाइमर बंद करने की आवश्यकता नहीं है? मैं निष्पादक या टाइमर ऑब्जेक्ट का नया उदाहरण नहीं बनाना चाहता ... – user301

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