मेरा उत्तर Timer
का उपयोग नहीं करना है, यह अप्रचलित है। चूंकि Java5, Timer
को ScheduledExecutorService
से हटा दिया गया है, जो अधिक लचीला और उपयोग करने में आसान है। शेड्यूलर कैसे काम करता है, इस पर आपको बेहतर नियंत्रण मिलता है, जिस तरह से आप Timer
के साथ नियंत्रण नहीं करते हैं।
आप Executors फैक्ट्री क्लास का उपयोग करके एक बनाते हैं, जिसमें कई फैक्ट्री विधियां हैं। एक आप पर विचार करना चाहिए newSingleThreadScheduledExecutor है, जो वास्तव में क्या करना चाहिए है क्या आप देख रहे हैं:
बनाता है एक एकल पिरोया निष्पादक कि आदेशों निर्धारित कर सकते हैं किसी दिए गए विलंब के बाद को चलाने के लिए, या निष्पादित करने के लिए समय-समय पर। कार्य अनुक्रमिक रूप से निष्पादित करने की गारंटी है, और से अधिक नहीं एक कार्य समय पर सक्रिय होगा।
एक
ScheduledExecutorService
साथ
, उपवर्गीकरण TimerTask
के बजाय, आप Runnable
सीधे उपवर्ग, और उसके बाद निष्पादक करने के लिए कार्य सबमिट करें। वहाँ निष्पादक पर विभिन्न तरीके हैं, तो आप लेने के लिए जो एक अपनी आवश्यकताओं के लिए उपयुक्त है (ScheduledExecutorService
ध्यान के लिए जावाडोक पढ़ें) की जरूरत है, लेकिन सार कुछ इस तरह है:
// initialise the executor
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
while (tasksRemaining) {
// create your task
Runnable task = ....;
// submit it to the executor, using one of the various scheduleXYZ methods
executor.schedule(task, delay, unit);
}
// when everything is finished, shutdown the executor
executor.shutdown();
हमेशा की तरह, जावाडोक पढ़ें।
यदि यह अप्रचलित है और प्रतिस्थापित किया गया है, तो इसे @deprecated के रूप में चिह्नित नहीं किया जाना चाहिए? –
मेरी राय में, हाँ, यह चाहिए, लेकिन विलुप्त होने पर सूर्य के नियम थोड़ा रहस्यमय हैं। कार्यात्मक रूप से, 'टाइमर'/'टाइमरटास्क 'निष्पादक ढांचे पर कुछ भी नहीं प्रदान करता है। – skaffman
क्या आप कृपया नए सिंगल थ्रेड शेड्यूल्डएक्सएटर का उपयोग करने का एक छोटा सा उदाहरण दिखा सकते हैं? मैं जावा के लिए नया हूं, और मैंने कभी निष्पादक वर्ग के बारे में नहीं सुना। धन्यवाद – Andrey