在某些场景下,获取的资源存在过期时间,超过期望的新鲜时间,再获取到的结果就是无效的,这时可以用Future来取消过期的任务。
public class FutureTimeOutDemo { static final ExecutorService executorService = Executors.newFixedThreadPool(5); public static void main(String[] args) { Future<String> future = null; try { FutureTimeOutDemo demo = new FutureTimeOutDemo(); future = demo.getTaskResult(); //预期获得2000毫秒内返回的结果 String result = future.get(2000, TimeUnit.MILLISECONDS); System.out.println("result is " + result); }catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } catch (TimeoutException e) { //取消过期的任务 future.cancel(true); System.out.println("timeout, print the default value: default" ); } executorService.shutdown(); } private Future<String> getTaskResult() throws InterruptedException{ Callable<String> task = new Callable<String>() { @Override public String call() throws Exception { Thread.sleep(3000); return "ok"; } }; return executorService.submit(task); } }