मेरे पास थोड़ी देर लूप है और मैं कुछ समय बीतने के बाद बाहर निकलना चाहता हूं।एक निश्चित समय के बाद थोड़ी देर के लिए कैसे बाहर निकलें?
उदाहरण के लिए:
while(condition and 10 sec has not passed){
}
मेरे पास थोड़ी देर लूप है और मैं कुछ समय बीतने के बाद बाहर निकलना चाहता हूं।एक निश्चित समय के बाद थोड़ी देर के लिए कैसे बाहर निकलें?
उदाहरण के लिए:
while(condition and 10 sec has not passed){
}
long startTime = System.currentTimeMillis(); //fetch starting time
while(false||(System.currentTimeMillis()-startTime)<10000)
{
// do something
}
इस प्रकार बयान
(System.currentTimeMillis()-startTime)<10000
जांच करें कि क्या यह 10 सेकंड या 10,000 मिलीसेकंड कर दिया गया है के बाद से पाश शुरू कर दिया।
संपादित
@Julien के रूप में कहे अनुसार, इस विफल हो सकता है, जबकि पाश के अंदर अपना कोड ब्लॉक ExecutorService का उपयोग कर एक अच्छा विकल्प होगा time.Thus का एक बहुत लगता है।
पहले हम
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(new MyTask()), 10, TimeUnit.SECONDS); // Timeout of 10 seconds.
executor.shutdown();
जैसा कि मेरे उत्तर में बताया गया है, यह कोड चाल नहीं करेगा। यदि लूप में कोड अनंत समय लेता है तो यह अनिश्चित रूप से चला सकता है। – Julien
धन्यवाद, कृपया संपादन देखें। –
कुछ की तरह:
long start_time = System.currentTimeMillis();
long wait_time = 10000;
long end_time = start_time + wait_time;
while (System.currentTimeMillis() < end_time) {
//..
}
चाल करना चाहिए। यदि आपको अन्य स्थितियों की भी आवश्यकता है तो बस उन्हें थोड़ी देर के वक्त में जोड़ें।
प्रस्तावित और स्वीकार किए जाते हैं समाधान चाल से काम नहीं चलेगा Runnable
class MyTask implements Runnable
{
public void run() {
// add your code here
}
}
तो हम इस तरह ExecutorService उपयोग कर सकते हैं लागू करने के लिए है, होगा।
यह 10 सेकंड के बाद लूप को नहीं रोकेगा। कल्पना करें कि आपके लूप में कोड को संसाधित करने में 20 सेकंड लगते हैं और 9.9 सेकेंड पर कॉल किया जाता है। आपका कोड निष्पादन के 29.9 सेकंड के बाद बाहर निकल जाएगा।
यदि आप 10 सेकंड के बाद बिल्कुल रुकना चाहते हैं, तो आपको एक बाहरी थ्रेड में अपना कोड निष्पादित करना होगा जिसे आप एक निश्चित टाइमआउट के बाद मार देंगे।
प्रस्तावित किया गया है इस
System.currentTimeMillis()-startTime
का उपयोग न करें यह होस्ट मशीन समय परिवर्तन पर लटका हो सकती है। बेहतर उपयोग इस तरह से:
Integer i = 0;
try {
while (condition && i++ < 100) {
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
(100 * 100 = 10 सेकंड का समय समाप्त)
मेरा अनुमान से, क्या आप देख रहे हैं यह है: http://stackoverflow.com/questions/4252187/ कैसे-टू-स्टॉप-निष्पादन-बाद-निश्चित-समय-में-जावा # उत्तर -4252197 – sPaz