मैं जावा में एक resetable समय के साथ java.utils.Timer रखना चाहता हूँ। मुझे एक्स सेकंड में एक बार ऑफ घटना होने की आवश्यकता है। यदि टाइमर बनाया गया था और एक्स सेकंड के बीच कुछ भी नहीं होता है, तो घटना सामान्य के रूप में होती है।रीसेट करने योग्य जावा टाइमर
यदि, हालांकि, एक्स सेकंड बीत जाने से पहले, मैं तय करता हूं कि घटना इसके बजाय वाई सेकंड के बाद होनी चाहिए, तो मैं टाइमर को अपना समय रीसेट करने में सक्षम होना चाहता हूं ताकि ईवेंट वाई सेकंड में हो। ईजी। टाइमर की तरह कुछ करने के लिए सक्षम होना चाहिए:
Timer timer = new Timer();
timer.schedule(timerTask, 5000); //Timer starts in 5000 ms (X)
//At some point between 0 and 5000 ms...
setNewTime(timer, 8000); //timerTask will fire in 8000ms from NOW (Y).
मैं, इस utils टाइमर का उपयोग करने के लिए एक रास्ता नहीं दिख रहा है के रूप में यदि आप रद्द फोन() आप इसे फिर से शेड्यूल नहीं कर सकते।
इस व्यवहार को दोहराने के करीब आने का एकमात्र तरीका javax.swing.Timer का उपयोग करके और मूल टाइमर को रोकने और एक नया निर्माण करना शामिल है। i.e .:
timer.stop();
timer = new Timer(8000, ActionListener);
timer.start();
क्या कोई आसान तरीका है ??
ScheduledThreadPoolExecutor इस टाइमर में के बारे में बात कर रहा है: http://developer.android.com/reference/java/util/Timer.html इस दृष्टिकोण के साथ –
मुद्दा यह है कि तुम अब 'TimerTask के लिए उपयोग किया है आपके कार्य के अंदर .scheduledExecutionTime() '। आप यह निर्धारित करने में सक्षम नहीं होंगे कि कार्य "मंद" है और निष्पादित नहीं होना चाहिए। –
'myScheduledThreadPoolExecutor.getQueue()। सभी अनुसूचित कार्यों को निकालने के लिए साफ़()' का उपयोग करें जो अभी तक नहीं चल रहे हैं लेकिन आप इस तकनीक का उपयोग 'execors.newSingleThreadScheduledExecutor()' के साथ नहीं कर सकते हैं, आपको एक नया अनुसूचित थ्रेडपूल एक्स्सेलर को तुरंत चालू करना होगा (1) 'क्योंकि निष्पादक द्वारा लौटाई गई वस्तु पर केवल इंटरफेस विधियों का खुलासा किया जाता है। – gMale