Pomiń funkcję, jeśli trwa zbyt długo

W Javie mam funkcję, która przetwarza plik tekstowy w określony sposób. Jeśli jednak zajmie to zbyt dużo czasu, najprawdopodobniej proces będzie bezużyteczny (niezależnie od przyczyny) dla tego pliku tekstowego i chciałbym go pominąć. Co więcej, jeśli proces trwa zbyt długo, zajmuje również zbyt dużo pamięci. Próbowałem to rozwiązać w ten sposób, ale to nie działa:

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

gdziedocs jest po prostuList plików w katalogu. Zazwyczaj muszę ręcznie zatrzymać kod, ponieważ jest „zablokowany” w konkretnym pliku (w zależności od zawartości tego pliku).

Czy istnieje sposób pomiaru czasu dla tego wywołania funkcji i powiedzenia Java, aby pominąć plik, funkcja zajmuje więcej niż, powiedzmy, 10 sekund?

EDYTOWAĆ
Po zeskrobaniu kilku różnych odpowiedzi wpadłem na to rozwiązanie, które działa dobrze. Być może ktoś może również skorzystać z tego pomysłu.

Najpierw utwórz klasę, która implementuje Runable (w ten sposób możesz przekazać argumenty do wątku, jeśli to konieczne):

public class CustomRunnable implements Runnable {

    Object argument;

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

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

Następnie użyj tego kodu wmain klasa do monitorowania czasu funkcji (argument.doFunction()) i wyjdź, jeśli to potrwa długo:

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

zdaję sobie sprawęstop() jest zdeprecjonowany, ale nie znalazłem innego sposobu, aby zatrzymać i wyjść z wątku, gdy chcę go zatrzymać.

questionAnswers(2)

yourAnswerToTheQuestion