2010-07-06 20 views
5

Quiero saber cómo detener la ejecución de una función específica dentro de un tiempo especificado en Java.¿Es posible detener la ejecución de una función dentro de un tiempo especificado en Java?

Por ejemplo: puedo llamar a una función llamada print_data(). Si lleva más tiempo ejecutarlo, tendré que detener la ejecución de esa función.

¿Es posible detener la ejecución de esta manera?

Gracias de antemano

+0

Puede ejecutar esta función en una secuencia separada y luego abortar la cadena después de un período de tiempo. – BobbyShaftoe

+0

lo siento, no he utilizado hilo en el programa, cualquier otra posible es que hay? –

Respuesta

4

Se podría añadir algunos controles a su función: guardar la marca de tiempo cuando la función comenzó a trabajar y luego periódicamente comprobar que dentro de la función, lanzar una excepción si la función toma demasiado tiempo.

Esta es la forma más limpia de realizar dicha tarea en Java.

+0

Empecé a pensar en algún hilo de temporizador y en un mecanismo para interrumpir el proceso, pero si la impresión se realiza en un bucle, su método es mucho más simple y más efectivo. +1. –

2

Puede usar el TimeUnit enum de java.util.concurrent, en particular el método timedJoin.

Especifique un tiempo de espera y un hilo. timedJoin permitirá que su subproceso se ejecute hasta la terminación, o se detenga si el procesamiento lleva más tiempo que el tiempo de espera permitido. Puede utilizar una clase anónima para ajustar su método fácilmente en un objeto Thread.

Esto puede ser tan fácil como:

SECONDS.timedJoin(
    new Thread() { 
     public void run() { 
     print_data(); 
     } 
    }, 
    10);  

para un tiempo de espera de 10 segundos.

3

No hay una manera segura de detener la ejecución de un hilo, a menos que sea cooperativo; p.ej. comprueba regularmente la bandera 'interrumpida'.

@BobbyShaftoe sugiere esto en un comentario:

Se puede ejecutar esta función en un hilo separado y luego abortar el hilo después de un cierto período de tiempo.

Esto es un consejo engañoso y peligroso. La única forma de "abortar" un hilo es usar el método obsoleto Thread.stop(). Si observas el javadoc para ese método, verás que es un método fundamentalmente peligroso que puede tener efectos secundarios indeseables e impredecibles.

También se debe tener en cuenta que la solución de @ tonio no detiene la ejecución de la función. Simplemente deja de esperar a que finalice la ejecución de la función. La función podría continuar ejecutándose indefinidamente, masticando recursos sin ningún efecto.

+0

+1 @Stephen C: para distinguir entre detener realmente la ejecución y simplemente ignorar en después de un tiempo de espera de ceetain. – bguiz

Cuestiones relacionadas