Jak ustawić limit czasu dla funkcji java uruchamiającej wyrażenie regularne

Używam wyrażenia regularnego w funkcji java, aby przeanalizować dokument i zwrócić true, jeśli znalazł ciąg określony przez wyrażenie regularne i zwrócić false, jeśli nie ma. Ale problem polega na tym, że gdy dokument nie zawiera łańcucha określonego przez wyrażenie regularne, zwrócenie false zajmuje bardzo dużo czasu i chcę zakończyć tę funkcję, jeśli wykonanie zajmuje więcej niż 6 sekund.

Jak ustawić limit czasu na tę funkcję na 6 sekund, aby wymusić zakończenie tej funkcji, jeśli zajmie to więcej niż 6 sekund.

Nazywam metodę „metoda 1” klasy 2 z klasy 1. „Metoda 1” wywołuje „metodę 2” tej samej klasy, tj. „Klasę 2”. Metoda 2 uruchamia kod wyrażeń regularnych na dokumencie. Jeśli znajdzie ciąg określony przez wyrażenie regularne, wówczas zwraca wynik do metody 1, która z kolei zwraca wynik do metody w „klasie 1”, która nazywała się „metodą 1” klasy 2. Problemem jest to, że czas wykonania metody1 i metody2 klasy 2 nie powinien być dłuższy niż 6 sekund.

Zrobiłem więc nową klasę RegexpThread w tym samym pliku, w którym była moja klasa2. Następnie przenoszę metodę2 klasy2 do klasy RegexpThread. Następnie za każdym razem, gdy wywoływana jest metoda 1, tworzy ona instancję klasy RegexpThread w następujący sposób:

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();

Pokazany kod jest w metodzie 1 klasy 2. Metoda 2 w klasie RegexpThread wykonuje pewne wyszukiwanie wyrażeń regularnych w dokumencie. W klasie RegexpThread znajduje się prywatne pole o nazwie „resultXml”. Jeśli metoda 2 znalazła ciąg określony przez wyrażenie regularne, przypisuje wynik do pola prywatnego „resultXml”. Jeśli nie, to „resultXml” zawiera domyślną wartość, tj. Pusty łańcuch.

Tak więc w powyższym „if block” sprawdza pole „resultXml” przed pustym łańcuchem. Jeśli jest to pusty łańcuch, oznacza to, że wyrażenie regularne nie znalazło swojego ciągu w dokumencie. Ale jeśli nie jest to pusty łańcuch, oznacza to, że wyrażenie regularne znalazło łańcuch w dokumencie i przypisało wynik do pola „resultXml”.

więc spójrz na to i powiedz mi, co robić ...

questionAnswers(9)

yourAnswerToTheQuestion