0

java main で検索メソッドを実行し、検索メソッドが返すタイムアウトを実装したいと考えています。そうしないと、タイムアウト メッセージがスローされます。スレッドまたはタイマー クラスを使用して、このタイムアウト機能を実現するにはどうすればよいですか?

4

1 に答える 1

3

1つのアプローチは、検索タスクをエグゼキュータに送信し、返される未来を呼び出すget(timeout);ことです-本質的には:

  • タスクでCallableを作成する
  • タイムアウトで実行する
  • タイムアウトした場合はキャンセルします-キャンセルが機能するためには、Callableが中断に対応する必要があります
Callable<SearchResult> task = ...;
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<SearchResult> f = executor.submit(task);

SearchResult result = null;
try {
    result = f.get(2, TimeUnit.SECONDS); //2 seconds timeout
    return result;
} catch (TimeOutException e) {
    //handle the timeout, for example:
    System.out.println("The task took too long");
} finally {
    executor.shutdownNow(); //interrupts the task if it is still running
}
于 2012-10-07T09:50:48.827 に答える