Пропустить функцию, если это занимает слишком много времени

В Java у меня есть функция, которая обрабатывает текстовый файл определенным образом. Однако, если это займет слишком много времени, процесс, скорее всего, будет бесполезным (независимо от причины) для этого текстового файла, и я хотел бы пропустить его. Кроме того, если процесс занимает слишком много времени, он также использует слишком много памяти. Я пытался решить это таким образом, но это не работает:

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

гдеdocs это простоList файлов в каталоге. Обычно мне приходится вручную останавливать код, потому что он «застрял» в определенном файле (в зависимости от содержимого этого файла).

Есть ли способ измерения времени для вызова этой функции и указания Java пропустить файл, функция занимает, скажем, более 10 секунд?

РЕДАКТИРОВАТЬ
Собрав несколько разных ответов вместе, я пришел к этому решению, которое отлично работает. Возможно, кто-то еще может использовать эту идею.

Сначала создайте класс, который реализует Runable (таким образом, при необходимости вы можете передавать аргументы в Thread):

public class CustomRunnable implements Runnable {

    Object argument;

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

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

Затем используйте этот код вmain класс для контроля времени функции (argument.doFunction()) и выйдите, если это займет много времени:

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

я понимаюstop() устарел, но я не нашел другого способа остановить и выйти из потока, когда я хочу остановить его.

Ответы на вопрос(2)

Ваш ответ на вопрос