Как установить предел продолжительности разбора для объекта документа в Java - PullRequest
3 голосов
/ 13 июня 2011

Я использую синтаксический анализатор Jtidy в java. Вот мой код ...

  URL url = new URL("www.yahoo.com");
  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  InputStream in = conn.getInputStream();
  Tidy tidy = new Tidy();
  Document doc = tidy.parseDOM(in, null);

Когда я прихожу к этому утверждению Document doc = tidy.parseDOM(in, null);, это занимает слишком много времени для анализа страницы, поэтому яхочу установить лимит времени для документа объекта.Пожалуйста, помогите мне, как установить время.

1 Ответ

3 голосов
/ 13 июня 2011

Вы можете использовать инфраструктуру java.util.Executors и отправить ей ограниченное по времени задание.

Вот код, демонстрирующий это:

// Note that these variables must be declared final to be accessible to task
final InputStream in = conn.getInputStream();
final Tidy tidy = new Tidy();

ExecutorService service = Executors.newSingleThreadExecutor();
// Create an anonymous class that will be submitted to the service and returns your result
Callable<Document> task = new Callable<Document>() {
    public Document call() throws Exception {
        return tidy.parseDOM(in, null);
    }
};
Future<Document> future = service.submit(task);
// Future.get() offers a timed version that may throw a TimeoutException
Document doc = future.get(10, TimeUnit.SECONDS);
...