2009-05-04 6 views
7

मैं रूबी में जावा में कार्यक्षमता इस के समान के लिए देख रहा हूँ:मैं मुख्य थ्रेड पर जावा में कुछ कोड के आसपास टाइमआउट कैसे सेट कर सकता हूं?

SystemTimer.timeout_after (30.seconds) कुछ अंत करते हो

मैं एक धागा forking और फिर इसे हत्या करके इस लक्ष्य को हासिल कर सकता है थोड़ी देर बाद, लेकिन क्या कोई आसान तरीका है?

+0

http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html पढ़ने के लिए बाहरी संसाधनों को –

उत्तर

-1

या तो एक थ्रेड में इसे चलाने या कुछ इस तरह करते हैं:

void method() { 
    long endTimeMillis = System.currentTimeMillis() + 10000; 
    while (true) { 
     // method logic 
     if (System.currentTimeMillis() > endTimeMillis) { 
      // do some clean-up 
      return; 
     } 
    } 
} 

आप देख सकते हैं, इस विधियों में से सभी प्रकार के लिए काम नहीं करता।

2

क्या आप जावा Timer का उपयोग कर सकते हैं?

पृष्ठभूमि थ्रेड में भावी निष्पादन के लिए कार्यों को शेड्यूल करने के लिए थ्रेड के लिए एक सुविधा। कार्यों को एक बार निष्पादन के लिए निर्धारित किया जा सकता है, या नियमित अंतराल पर बार-बार निष्पादन के लिए निर्धारित किया जा सकता है।

0

आप एक ThreadPoolExecutor है, जो एक invokeAll विधि है जो एक पैरामीटर के रूप में एक टाइमआउट recievs है बना सकते हैं।

public static <V> Optional<V> of(PrivilegedAction<V> action, Duration duration) { 

    final CompletableFuture<V> handler = CompletableFuture.supplyAsync(() -> action.run()); 
    V retval = null; 
    try { 
     retval = handler.get(duration.toMillis(), TimeUnit.MILLISECONDS); 
    } catch (TimeoutException te) { 
    } catch (Exception e) { 
     try { 
      handler.cancel(true); 
     } catch (CancellationException ce) { 
     } 
    } 
    return Optional.ofNullable(retval); 
} 

एक util वर्ग मैं बनाया: (जर्मन टिप्पणी

0

क्या आप देख रहे हैं CompletableFuture<T> जावा 8. से (लिंक आधिकारिक JavaDoc की ओर जाता है)

प्रयोग कुछ इस तरह दिख सकता है) DTimeout (pastebin में देखें)

+1

लिंक प्रोत्साहित किया जाता है सुनिश्चित करें, लेकिन कृपया जोड़ने लिंक के आसपास संदर्भ तो वाई हमारे साथी उपयोगकर्ताओं को कुछ पता होगा कि यह क्या है और यह क्यों है। यदि लक्षित साइट पहुंच योग्य नहीं है या स्थायी रूप से ऑफलाइन हो जाती है, तो हमेशा एक महत्वपूर्ण लिंक के सबसे प्रासंगिक भाग को उद्धृत करें। – pableiros

संबंधित मुद्दे

 संबंधित मुद्दे