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;
}
}