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