Callable
インスタンス内で長時間実行される計算を検討してください。
そして、この計算の結果は、計算時間に応じてある程度の精度を持つ可能性があることを考慮してください。つまり、タスクがキャンセルされる場合、キャンセルする前にそれまでに計算されたものを返す必要があります (たとえば、計算する無理数のコンベアがあります)。
標準の Java 同時実行ユーティリティを使用してこのパラダイムを実装することが望ましいです。
Callable<ValuableResult> task = new Callable<>() { ... };
Future<ValuableResult> future = Executors.newSingleThreadExecutor().submit(task);
try {
return future.get(timeout, TimeUnit.SECONDS);
} catch (TimeoutException te) {
future.cancel(true);
// HERE! Get what was computed so far
}
Future
とインターフェースを完全に再実装しなければ、ThreadPoolExecutor
この問題は解決できないようです。Java 1.7 でそのための便利な既存のツールはありますか?