Как установить ограничение по времени для Java-функции, выполняющей регулярное выражение

Я выполняю регулярное выражение в функции Java для синтаксического анализа документа и возврата истины, если он нашел строку, указанную в регулярном выражении, и возврата ложных, если это не так. Но проблема в том, что, когда документ не содержит строку, указанную в регулярном выражении, для возврата false требуется очень много времени, и я хочу завершить эту функцию, если выполнение занимает более 6 секунд.

Как я могу установить ограничение времени 6 секунд для этой функции, чтобы принудительно прекратить это, если это занимает более 6 секунд.

Я вызываю метод «метод 1» класса 2 из класса 1. «Метод 1» вызывает "метод 2" одного и того же класса, то есть "класс 2". Метод 2 запускает код регулярного выражения над документом. Если он находит строку, указанную в регулярном выражении, он возвращает результат методу 1, который, в свою очередь, возвращает результат методу в «классе 1». который вызвал «метод 1»; класса 2. Теперь проблема в том, что время выполнения метода method1 и method2 класса 2 должно быть не более 6 секунд.

Итак, я создал новый класс RegexpThread в том же файле, в котором находился мой class2. Затем я перемещаю method2 класса class2 в класс RegexpThread. Затем всякий раз, когда вызывается метод 1, он создает экземпляр класса RegexpThread следующим образом:

RegexpThread rt = new RegexpThread() {
  public void run() {
    method 2(m, urlCopy, document);
  }

};

rt.start();

try {
    rt.join(6 * 1000);
} catch (InterruptedException e) {
    return "y";
}

if(rt.getResultXml().equals("")) {
    return "g";
}

resultXml.append(rt.getResultXml());

return resultXml.toString();

Показанный код находится в методе 1 класса 2. Метод 2 в классе RegexpThread выполняет поиск регулярных выражений в документе. Существует закрытое поле с именем & quot; resultXml & quot; в классе RegexpThread. Если метод 2 нашел строку, указанную в регулярном выражении, то он присваивает результат закрытому полю & quot; resultXml & quot ;. Если нет, то & quot; resultXml & quot; содержит значение по умолчанию, т.е. пустую строку.

Таким образом, в приведенном выше «блоке» проверяется «resultXml». поле против пустой строки. Если это пустая строка, это означает, что регулярное выражение не нашло свою строку в документе. Но если это не пустая строка, это означает, что регулярное выражение нашло строку в документе и присвоило результат & quot; resultXml & quot; поле.

Итак, посмотрите на это и скажите мне, что делать ...

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

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