2010-10-29 8 views
5

में निर्धारित कार्य को तुरंत कैसे रोकें मैंने सब कुछ करने की कोशिश की।Java.util.Timer क्लास

  1. मैं इस तरह टाइमर अनुसूची:

    टाइमर यह एक बहुत How to stop the task scheduled in Java.util.Timer class

    मैं एक काम है कि java.util.TimerTask

    लागू करता है मैं 2 तरीकों से उस कार्य को फोन किया है। अनुसूची (टाइमरटास्क, 60 * 1000);

  2. कभी कभी मुझे लगता है कि काम की जरूरत तुरंत शुरू करने के लिए और यह timerTask रद्द करने के लिए अगर वहाँ किसी भी है कि

    काम कर

    cancelCurrentWork() है; timer.schedule (टाइमर टास्क, 0);

इस कार्यान्वयन वर्तमान काम करना बंद नहीं करता है: (प्रलेखन कहते हैं: अगर काम जब इस कॉल होता चल रहा है, कार्य पूरा होने से चलाया जाएगा, लेकिन फिर कभी नहीं चलेंगे)

लेकिन मैं इसे रोकने की जरूरत है।

public static void cancelCurrentwork() { 
if (timerTask!= null) { 
    timerTask.cancel(); 
} 
} 

इस कार्यान्वयन सिर्फ टाइमर रद्द, लेकिन वर्तमान में कार्य कर रही है पत्ते अनुरूप तैयार किया जाए।

public static void cancelCurrentwork() { 
if (timer!= null) { 
    timer.cancel(); 
} 
} 

वहाँ टाइमर में एक तरह से वर्तमान क्रियान्वित taks रोकने के Thread.kill() या कुछ और की तरह कुछ है? जब मुझे रोकने के लिए उस कार्य की आवश्यकता होती है तो मैं इसे अपने सभी डेटा को खोना चाहता हूं।

उत्तर

5

टाइमर को अपने ट्रैक में कार्य को रोकने का कोई तरीका नहीं है।

आपको चल रहे कार्य में एक अलग तंत्र की आवश्यकता होगी, जो जांचता है कि इसे चलाना चाहिए या नहीं। उदाहरण के लिए आप AtomicBoolean keepRunning वैरिएबल कर सकते हैं जिसे आप गलत करना चाहते हैं जब आप कार्य को समाप्त करना चाहते हैं।

+0

और कार्य के अंदर से काम को कैसे रोकें? मैं बुलियन के साथ जांच सकता था, लेकिन फिर मुझे किस विधि को कॉल करना चाहिए? this.cancel()? – vale4674

+1

और अन्य प्रश्न: क्या कोई एपीआई जैसे ScheduledExecutorService या ऐसा कुछ आपको कार्य रोकने की अनुमति देता है? – vale4674

+0

नहीं, आप बस 'रन' विधि से वापस आते हैं। – aioobe

0

यदि आपका टाइमर किसी प्रकार की फ़ाइल/सॉकेट इत्यादि का उपयोग कर रहा है, तो आप उस ऑब्जेक्ट को टाइमर के बाहर से बंद कर सकते हैं, और टाइमर कार्य अपवाद फेंक देगा, और आप टाइमर को रोकने के लिए इसका उपयोग कर सकते हैं।

लेकिन आम तौर पर आपको अलग थ्रेड/टाइमर को सफलतापूर्वक रोकने के लिए कुछ प्रकार की जहर गोली की आवश्यकता होती है।

+0

हाँ, लेकिन यह बात है। इसे तुरंत रोकने का कोई तरीका नहीं है और मैं वास्तव में समझ में नहीं आता कि यह कैसे संभव है। – vale4674

+0

वैसे भी मैंने ऐयोबेब से उस सुझाव का उपयोग किया, और मैं लगातार अपना ध्वज जांचता हूं और फिर "रन" विधि से वापस आ जाता हूं। – vale4674

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