package player.kent.chen.learn.future; import java.io.File; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import org.apache.commons.io.FileUtils; public class HelloFuture { public static void main(String[] args) throws Throwable { //一个待完成事项 Callable<String> task = new Callable<String>() { public String call() throws Exception { return FileUtils.readFileToString(new File("/home/kent/temp/1.txt")); } }; //生成executor并异步执行 ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(task); try { //阻塞式地等待结果 String text = future.get(); System.out.println(text); } catch (InterruptedException e) { Thread.currentThread().interrupt(); future.cancel(true); //既然都被打断了,future也可以取消了 } catch (ExecutionException e) { throw e.getCause(); //task在执行时遇到的异常,比如FileNotFoundException } finally { //为了关闭线程池,这下面两句一般配合使用 executor.shutdown(); executor.awaitTermination(1000l, TimeUnit.SECONDS); } } }