एक टाइमर सेट करने के लिए, 2 मिनट के लिए, डेटाबेस से कनेक्ट करने का प्रयास करने के लिए तब अपवाद फेंक दें यदि कनेक्शन में कोई समस्या है?
एक टाइमर सेट करने के लिए, 2 मिनट के लिए, डेटाबेस से कनेक्ट करने का प्रयास करने के लिए तब अपवाद फेंक दें यदि कनेक्शन में कोई समस्या है?
जवाबों:
तो जवाब का पहला हिस्सा यह है कि कैसे करें कि विषय क्या पूछता है क्योंकि मैंने शुरू में इसकी व्याख्या की थी और कुछ लोगों को यह मददगार लग रहा था। प्रश्न स्पष्ट होने के बाद से था और मैंने इसका जवाब देने के लिए उत्तर दिया है।
टाइमर सेट करना
पहले आपको एक टाइमर बनाने की आवश्यकता है (मैं java.util
यहां संस्करण का उपयोग कर रहा हूं ):
import java.util.Timer;
..
Timer timer = new Timer();
एक बार कार्य करने के लिए आप क्या करेंगे:
timer.schedule(new TimerTask() {
@Override
public void run() {
// Your database code here
}
}, 2*60*1000);
// Since Java-8
timer.schedule(() -> /* your database code here */, 2*60*1000);
आपके द्वारा किए जाने वाले अवधि के बाद कार्य को दोहराने के लिए:
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Your database code here
}
}, 2*60*1000, 2*60*1000);
// Since Java-8
timer.scheduleAtFixedRate(() -> /* your database code here */, 2*60*1000, 2*60*1000);
किसी कार्य को समय-समय पर करना
विशेष रूप से वह करने के लिए जो स्पष्ट प्रश्न पूछता है, जो किसी दिए गए समय के लिए कार्य करने का प्रयास कर रहा है, आप निम्नलिखित कार्य कर सकते हैं:
ExecutorService service = Executors.newSingleThreadExecutor();
try {
Runnable r = new Runnable() {
@Override
public void run() {
// Database task
}
};
Future<?> f = service.submit(r);
f.get(2, TimeUnit.MINUTES); // attempt the task for two minutes
}
catch (final InterruptedException e) {
// The thread was interrupted during sleep, wait or join
}
catch (final TimeoutException e) {
// Took too long!
}
catch (final ExecutionException e) {
// An exception from within the Runnable task
}
finally {
service.shutdown();
}
यह सामान्य रूप से अपवादों के साथ निष्पादित करेगा यदि कार्य 2 मिनट के भीतर पूरा हो जाता है। यदि यह उससे अधिक समय तक चलता है, तो टाइमआउट अपवाद को फेंक दिया जाएगा।
एक मुद्दा यह है कि यद्यपि आपको दो मिनट के बाद टाइमआउट अपवाद मिल जाएगा , कार्य वास्तव में चलना जारी रहेगा , हालांकि संभवतः एक डेटाबेस या नेटवर्क कनेक्शन अंततः समय समाप्त हो जाएगा और थ्रेड में एक अपवाद फेंक देगा। लेकिन ध्यान रहे कि ऐसा होने तक संसाधनों की खपत हो सकती है।
इसे इस्तेमाल करो
long startTime = System.currentTimeMillis();
long elapsedTime = 0L.
while (elapsedTime < 2*60*1000) {
//perform db poll/check
elapsedTime = (new Date()).getTime() - startTime;
}
//Throw your exception
ठीक है, मुझे लगता है कि मैं अब आपकी समस्या को समझता हूं। आप कुछ करने की कोशिश करने के लिए फ्यूचर का उपयोग कर सकते हैं और फिर कुछ नहीं होने पर थोड़े समय के बाद टाइमआउट कर सकते हैं।
उदाहरण के लिए:
FutureTask<Void> task = new FutureTask<Void>(new Callable<Void>() {
@Override
public Void call() throws Exception {
// Do DB stuff
return null;
}
});
Executor executor = Executors.newSingleThreadScheduledExecutor();
executor.execute(task);
try {
task.get(5, TimeUnit.SECONDS);
}
catch(Exception ex) {
// Handle your exception
}
new java.util.Timer().schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Executed...");
//your code here
//1000*5=5000 mlsec. i.e. 5 seconds. u can change accordngly
}
},1000*5,1000*5);
[Android] अगर कोई जावा का उपयोग करके Android पर टाइमर लागू करना चाहता है ।
ऑपरेशन करने के लिए आपको यूआई थ्रेड का उपयोग करने की आवश्यकता है।
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
ActivityName.this.runOnUiThread(new Runnable(){
@Override
public void run() {
// do something
}
});
}
}, 2000));