Вам нужно использовать другой поток и останавливать его, когда у него заканчивается время.
Существует два способа остановки: Thread # stop () и Thread # interrupt ().
Использование Thread.stop () довольно опасно, и Matcher не отвечает на Thread.interrupt (ответ на прерывание является обязательным поведением).
НО есть действительно умное решение, некоторые детали здесь .Используйте предоставленный InterruptibleCharSequence (он оборачивает вашу строку и работает почти как один, НО добавляет поддержку Thread # interrupt ()), затем создайте свой собственный Callable, возвращающий все, что возвращает matcher.Каждый выполняемый модуль теперь может быть выполнен с использованием комбо FutureTask / ThreadPool, и вы можете получить результат с любым временем ожидания:
Boolean result = myMatchingTask().get(2, TimeUnit.SECONDS)
Если вы находитесь в среде Java EE, вы можете пропустить сложную часть, простоиспользуйте вызовы InterruptipleCharSequence и @Asynchronous.
Если это звучит загадочно, попросите подробности.