2009-05-04 9 views

Respuesta

-1

De cualquier ejecuta en un hilo o hacer algo como esto:

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

Como se puede ver, esto no funciona para todo tipo de métodos.

2

¿No puedes usar el Java Timer?

Instalación de subprocesos para programar tareas para su futura ejecución en una cadena de fondo. Las tareas pueden programarse para una ejecución única o para una ejecución repetida a intervalos regulares.

0

Lo que se busca es la CompletableFuture<T> (Enlace conduce a JavaDoc oficial) desde Java 8.

uso podría ser algo como esto:

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

Una clase util creé: (comentarios en alemán) DTimeout (Ver en Pastebin)

+1

Los enlaces a recursos externos, pero por favor agregue contexto alrededor del enlace por lo que nuestros compañeros usuarios tendrán una idea de qué es y por qué está allí. Siempre cite la parte más relevante de un enlace importante, en caso de que el sitio objetivo no esté disponible o esté permanentemente fuera de línea. – pableiros

Cuestiones relacionadas