2010-07-06 13 views
5

Voglio sapere come interrompere l'esecuzione di una funzione specificata entro un tempo specificato in java.È possibile interrompere l'esecuzione di una funzione entro un tempo specificato in Java?

Ad esempio: È possibile chiamare una funzione denominata print_data(). Se ci vorrà più tempo per l'esecuzione, dovrò interrompere l'esecuzione di quella funzione.

È possibile interrompere l'esecuzione in questo modo?

Grazie in anticipo

+0

È possibile eseguire questa funzione in un thread separato e quindi interrompere il thread dopo un certo periodo di tempo. – BobbyShaftoe

+0

scusa non ho usato thread in programma, qualsiasi altro possibile è lì? –

risposta

4

Si potrebbe aggiungere alcuni controlli alla funzione: salvare il timestamp quando la funzione ha iniziato a lavorare e poi verificare periodicamente che all'interno della funzione, un'eccezione se la funzione richiede troppo tempo.

Questo è il modo più pulito per eseguire tale attività in Java.

+0

Ho iniziato a pensare a qualche thread del timer ea un meccanismo per interrompere il processo, ma se la stampa viene eseguita in un ciclo, il metodo è molto più semplice ed efficace. +1. –

2

È possibile utilizzare TimeUnit enum da java.util.concurrent, in particolare il metodo timedJoin.

Specificare un tempo di attesa e una discussione. timedJoin consentirà l'esecuzione del thread fino alla sua chiusura, oppure interromperà se l'elaborazione richiede più tempo del timeout consentito. È possibile utilizzare una classe anonima per racchiudere facilmente il metodo in un oggetto Thread.

Questo può essere facile come:

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

per un timeout di 10 secondi.

3

Non esiste un modo sicuro per interrompere l'esecuzione di un thread, a meno che non sia cooperativo; per esempio. controlla regolarmente la flag "interrotta".

@BobbyShaftoe suggerisce questo in un commento:

Si potrebbe eseguire questa funzione in un thread separato e quindi interrompere il filo dopo un certo periodo di tempo.

Questo è un consiglio ingannevole e pericoloso. L'unico modo per "interrompere" un thread è utilizzare il deprecato metodo Thread.stop(). Se osservate lo javadoc per quel metodo, vedrete che si tratta di un metodo fondamentalmente pericoloso che potrebbe avere effetti collaterali indesiderabili e imprevedibili.

Va anche notato che la soluzione di @ tonio non interrompe l'esecuzione della funzione. Si ferma semplicemente in attesa del termine dell'esecuzione della funzione. La funzione potrebbe continuare a essere eseguita indefinitamente, masticando le risorse senza alcun effetto positivo.

+0

+1 @Stephen C: per distinguere tra l'arresto effettivo dell'esecuzione e semplicemente ignorare dopo un timeout di coda. – bguiz

Problemi correlati