2009-05-04 8 views

cevap

-1

Parçacığı onu çalıştırmak veya böyle bir şey Ya: Gördüğünüz gibi, bu yöntemlerin her türlü çalışmıyor

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

.

2

Java Timer mu kullanıyorsunuz?

Bir arka plan iş parçacığında gelecekte yürütme için görevler zamanlamak için bir tesis. Görevler bir kerelik bir uygulama için veya düzenli aralıklarla tekrarlı yürütme için planlanabilir.

0

Bir parametre olarak bir zaman aşımı recievs bir invokeAll yöntemi olan ThreadPoolExecutor oluşturabilir. Oluşturduğum

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); 
} 

bir util sınıfı: (Alman yorumlarınızı

0

Ne arıyorsun CompletableFuture<T>

Kullanımı şuna benzer olabilir Java 8. den (Bağlantı resmi JavaDoc'u yol açar) 'dir) DTimeout (View at pastebin)

+1

'u okuduğunuzdan emin olun. Harici kaynaklara bağlantılar teşvik edilir, ancak lütfen ekleyin bağlantı etrafında bağlam yani y Diğer kullanıcılarımız ne olduğu ve neden orada olduğu hakkında biraz fikir sahibi olacaklar. Hedef siteye ulaşılamaması veya sürekli olarak çevrimdışı olması durumunda, her zaman önemli bir bağlantının en alakalı bölümünü belirtin. – pableiros