Fature的做用是異步獲取結果,不影響主線程執行,如下是代碼java
package com.lujiawei.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; public class UserFature implements Callable<Integer> { private int age; public UserFature(int age) { this.age = age; } @Override public Integer call() throws Exception { for(int i=0;i<10;i++){ Thread.sleep(1000); age = age + 1; System.out.println("age --> "+age); } return age; } public static void main(String[] args) throws Exception { int age = 10; UserFature userFature = new UserFature(age); FutureTask<Integer> futureTask = new FutureTask<>(userFature); ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(1); Future<?> f = newFixedThreadPool.submit(futureTask); System.out.println("直接返回"); System.out.println(f.get());//當返回結果的時候f.get()爲null System.out.println("age爲-->"+futureTask.get()); } }
打印結果爲異步
直接返回 age --> 11 age --> 12 age --> 13 age --> 14 age --> 15 age --> 16 age --> 17 age --> 18 age --> 19 age --> 20 null age爲-->20