Funktion überspringen, wenn es zu lange dauert

8

In Java habe ich eine Funktion, die eine Textdatei auf eine bestimmte Weise verarbeitet. Wenn es jedoch zu viel Zeit in Anspruch nimmt, wird der Prozess wahrscheinlich (aus welchem ​​Grund auch immer) nutzlos für diese Textdatei sein und ich möchte sie überspringen. Wenn der Prozess zu lange dauert, verbraucht er außerdem zu viel Speicher. Ich habe versucht, es auf diese Weise zu lösen, aber es funktioniert nicht:

%Vor%

wobei docs nur ein List der Dateien in einem Verzeichnis ist. Normalerweise muss ich den Code manuell stoppen, weil er bei einer bestimmten Datei hängt (abhängig vom Inhalt dieser Datei).

Gibt es eine Möglichkeit, die Zeit für diesen Funktionsaufruf zu messen und Java zu sagen, dass es die Datei überspringen soll, die die Funktion mehr als 10 Sekunden benötigt?

BEARBEITEN
Nachdem ich ein paar verschiedene Antworten zusammengekratzt hatte, kam ich auf diese Lösung, die gut funktioniert. Vielleicht kann auch jemand anderes die Idee verwenden.

Erstellen Sie zuerst eine Klasse, die Runable implementiert (auf diese Weise können Sie bei Bedarf Argumente an den Thread übergeben):

%Vor%

Verwenden Sie dann diesen Code in der Klasse main , um den Zeitpunkt einer Funktion ( argument.doFunction() ) zu überwachen, und beenden Sie ihn, wenn es zu lang dauert:

%Vor%

Ich stelle fest, dass stop() dekreciert ist, aber ich habe keine andere Möglichkeit gefunden, den Thread zu stoppen und zu beenden, wenn ich möchte, dass er aufhört.

    
Tim 20.04.2013, 14:01
quelle

2 Antworten

8

Umschließen Sie Ihren Code in Runnable oder Callable und übergeben Sie ihn an einen geeigneten Executor, um ihn auszuführen. Eine der Submit-Methoden benötigt eine Zeitüberschreitung, nach deren Ablauf der Code unterbrochen wurde.

    
quelle
0

Sie können die interne Methode System.nanoTime() als Bedingung verwenden.

Zum Beispiel

%Vor%     
Eric Na 20.04.2013 14:10
quelle