Future 一个接口代表一个思想:如果调用的算法返回的数据,并且后续计算与这些数据没关系的话,大可不必浪费时间等待其完成。
FutureTask 是 JDK 提供的一个实现类,它接收一个实现 Callable 接口的业务对象,通常配合线程池一起使用。
掌握思想就能够在合适的场合去正确的应用,其实并不难。下面给出简单的示例一看即懂:
package demo01; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; public class FutureTest { public static void main(String[] args) throws Exception { FutureTask<String> futureTask=new FutureTask<>(new ExecuteSomething("ziwu")); ExecutorService service=Executors.newFixedThreadPool(1); service.submit(futureTask); TimeUnit.MINUTES.sleep(2); System.out.println(futureTask.get()); } } class ExecuteSomething implements Callable<String> { protected String data; public ExecuteSomething(String data) { this.data = data; } @Override public String call() throws Exception { TimeUnit.MINUTES.sleep(1); return data; } }