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