public class FutureMain { private static ExecutorService executorService = Executors.newSingleThreadExecutor(); public static void main(String[] args) throws ExecutionException, InterruptedException { Future future = executorService.submit(()->{ int i = 0; while (true) { if(i > 10) { break; } i++; System.out.println("single thread running.."+i); Thread.sleep(100); } return i; }); System.out.println("Main running"); future.get(); System.out.println("Main end"); executorService.shutdown(); } }
上面一个是future很基础的使用;看看输出状况html
Main running single thread running..1 single thread running..2 single thread running..3 single thread running..4 single thread running..5 single thread running..6 single thread running..7 single thread running..8 single thread running..9 single thread running..10 single thread running..11 Main end
submit的时候不会阻塞当前线程, 线程会继续往下执行;java
挡调用future.get()方法时,会使得executorService里的线程阻塞,同时有阻塞了main线程;线程
https://www.ibm.com/developerworks/cn/java/j-cf-of-jdk8/index.htmlcode