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ć ...