Skip-Funktion, wenn es zu lange dauert

In Java habe ich eine Funktion, die eine Textdatei auf eine bestimmte Weise verarbeitet. Wenn es jedoch zu lange dauert, ist der Prozess für diese Textdatei höchstwahrscheinlich nutzlos (aus welchem ​​Grund auch immer), und ich würde ihn gerne überspringen. Wenn der Vorgang zu lange dauert, wird außerdem zu viel Speicher verwendet. Ich habe versucht, es auf diese Weise zu lösen, aber es funktioniert nicht:

for (int i = 0; i<docs.size(); i++){
    try{
        docs.get(i).getAnaphora();
        }
    catch (Exception e){
        System.err.println(e);
    }
 }

woherdocs ist nur einList von Dateien in einem Verzeichnis. Normalerweise muss ich den Code manuell stoppen, da er an einer bestimmten Datei hängen bleibt (abhängig vom Inhalt dieser Datei).

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

BEARBEITEN
Nachdem ich ein paar verschiedene Antworten zusammengetragen hatte, kam ich zu dieser Lösung, die gut funktioniert. Vielleicht kann auch jemand anderes die Idee nutzen.

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

public class CustomRunnable implements Runnable {

    Object argument;

    public CustomRunnable (Object argument){
        this.argument = argument;
}

    @Override
    public void run() {
        argument.doFunction();
    }
}

Dann verwenden Sie diesen Code in dermain Klasse, um die Zeit einer Funktion zu überwachen (argument.doFunction()) und beenden, wenn es zu lange dauert:

Thread thread;
for (int i = 0; i<someObjectList.size(); i++){          
    thread = new Thread(new CustomRunnable(someObjectList.get(i)));
    thread.start();
    long endTimeMillis = System.currentTimeMillis() + 20000;
    while (thread.isAlive()) {
        if (System.currentTimeMillis() > endTimeMillis) {
        thread.stop();
        break;
    }
    try {
        System.out.println("\ttimer:"+(int)(endTimeMillis - System.currentTimeMillis())/1000+"s");
        thread.sleep(2000);
        }
    catch (InterruptedException t) {}
    }
}

ich merkestop() ist depcecated, aber ich habe keine andere Möglichkeit gefunden, den Thread anzuhalten und zu beenden, wenn ich möchte, dass er anhält.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage