दिलचस्प पोस्ट
त्रुटि :: एपीके के पैकेजिंग के दौरान डुप्लिकेट फ़ाइलें टाइमस्टैम्प पर लागू होने पर समान गुणों के साथ समय क्षेत्र के नाम अलग परिणाम उत्पन्न करते हैं दृश्य स्टूडियो 2010 अचानक नामस्थान देख नहीं सकता है? लिनक्स में एक आवेदन की एक एकल आवृत्ति सुनिश्चित करें जावा में एकाधिक विरासत कीस्टोर पासवर्ड परिवर्तित करें जब वास्तव में यह (गुमनाम) आंतरिक कक्षाओं का उपयोग करने के लिए सुरक्षित रिसाव है? वसंत सुरक्षा के साथ पकड़ने / सत्र का समय समाप्त एक आईओएस ऐप में फेसबुक प्रमाणीकरण के लिए डिजाइन जो एक सुरक्षित वेब सेवा तक पहुंचता है std :: cout प्रिंट नहीं होगा गिट रीसेट –हार्ड और रिमोट रिपॉजिटरी त्रुटि – SqlDateTime अतिप्रवाह 1/1/1753 12:00:00 पूर्वाह्न और 12/31/9999 11:59:59 अपराह्न के बीच होना चाहिए जावास्क्रिप्ट ड्राइंग लाइब्रेरी? WPF में एक विधि से बाँध सकते हैं? निर्देशों के बीच कोणीय जेएस संचार

java: एक निश्चित सेकंड के बाद एक फ़ंक्शन चलाएँ

मेरे पास एक विशेष फ़ंक्शन है जिसे मैं 5 सेकंड के बाद निष्पादित करना चाहता हूं। मैं जावा में ऐसा कैसे कर सकता हूं?

मुझे javax.swing.timer मिला है, लेकिन मैं वास्तव में इसका उपयोग कैसे कर सकता हूँ यह नहीं समझता। ऐसा लगता है कि मैं किसी तरह से सरलता की तलाश कर रहा हूं, तो यह क्लास प्रदान करता है।

कृपया एक सरल उपयोग उदाहरण जोड़ें।

वेब के समाधान से एकत्रित समाधान "java: एक निश्चित सेकंड के बाद एक फ़ंक्शन चलाएँ"

new java.util.Timer().schedule( new java.util.TimerTask() { @Override public void run() { // your code here } }, 5000 ); 

संपादित करें:

जवाडॉक कहता है:

टाइमर ऑब्जेक्ट के अंतिम लाइव संदर्भ को समाप्त होने के बाद और सभी बकाया कार्य निष्पादन पूर्ण हो गए हैं, टाइमर का कार्य निष्पादन थ्रेड बेहद समाप्त होता है (और कचरा संग्रह के अधीन होता है) हालांकि, यह मनमाने ढंग से लंबा होने के लिए ले सकता है।

कुछ इस तरह:

 // When your program starts up ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); // then, when you want to schedule a task Runnable task = .... executor.schedule(task, 5, TimeUnit.SECONDS); // and finally, when your program wants to exit executor.shutdown(); 

Executor पर कई अन्य कारखाने तरीके हैं जो आप इसके बजाय उपयोग कर सकते हैं, यदि आप पूल में अधिक धागे चाहते हैं।

और याद रखें, जब आप समाप्त कर लें तो निष्पादक को बंद करना महत्वपूर्ण है। अंतिम कार्य पूरा shutdown() विधि को थ्रेड पूल को बंद कर दिया जाएगा, और तब तक ब्लॉक होगा जब तक ऐसा नहीं होता। shutdownNow() थ्रेड पूल को तत्काल समाप्त कर देगा।

javax.swing.Timer का उपयोग करने का उदाहरण

 Timer timer = new Timer(3000, new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // Code to be executed } }); timer.setRepeats(false); // Only execute once timer.start(); // Go go go! 

यह कोड केवल एक बार निष्पादित होगा, और निष्पादन 3000 एमएस (3 सेकंड) में होता है

जैसा कि कैमरर का उल्लेख है, आपको संक्षिप्त परिचय के लिए " स्विंग टाइमर का उपयोग कैसे करें " देखना चाहिए।

आप थ्रेड का उपयोग कर सकते हैं। sleep () फ़ंक्शन

 Thread.sleep(4000); myfunction(); 

आपका फ़ंक्शन 4 सेकंड के बाद निष्पादित होगा। हालांकि यह पूरे कार्यक्रम को रोक सकता है …

मेरा कोड निम्नानुसार है:

 new java.util.Timer().schedule( new java.util.TimerTask() { @Override public void run() { // your code here, and if you have to refresh UI put this code: runOnUiThread(new Runnable() { public void run() { //your code } }); } }, 5000 ); 

आपका मूल प्रश्न "स्विंग टाइमर" का उल्लेख करता है अगर वास्तव में आपका सवाल स्विंग से संबंधित है, तो आपको स्विंग टाइमर का इस्तेमाल करना चाहिए और उपयोग नहीं करना चाहिए। टाइमर।

अधिक जानकारी के लिए " कैसे उपयोग करें टाइमर " पर स्विंग ट्यूटोरियल से अनुभाग पढ़ें

ScheduledThreadPoolExecutor इस क्षमता है, लेकिन यह काफी भारी है

Timer भी यह क्षमता होती है, लेकिन कई धागे खोलता है, भले ही केवल एक बार उपयोग हो।

यहां एक परीक्षण के साथ एक सरल कार्यान्वयन है (एंड्रॉइड के हैंडलर.postDelayed () के करीब हस्ताक्षर):

 public class JavaUtil { public static void postDelayed(final Runnable runnable, final long delayMillis) { final long requested = System.currentTimeMillis(); new Thread(new Runnable() { @Override public void run() { while (true) { try { long leftToSleep = requested + delayMillis - System.currentTimeMillis(); if (leftToSleep > 0) { Thread.sleep(leftToSleep); } break; } catch (InterruptedException ignored) { } } runnable.run(); } }).start(); } } 

परीक्षा:

 @Test public void testRunsOnlyOnce() throws InterruptedException { long delay = 100; int num = 0; final AtomicInteger numAtomic = new AtomicInteger(num); JavaUtil.postDelayed(new Runnable() { @Override public void run() { numAtomic.incrementAndGet(); } }, delay); Assert.assertEquals(num, numAtomic.get()); Thread.sleep(delay + 10); Assert.assertEquals(num + 1, numAtomic.get()); Thread.sleep(delay * 2); Assert.assertEquals(num + 1, numAtomic.get()); } 
 Public static timer t; public synchronized void startPollingTimer() { if (t == null) { TimerTask task = new TimerTask() { @Override public void run() { //Do your work } }; t = new Timer(); t.scheduleAtFixedRate(task, 0, 1000); } }