1、为什么要使用FutureTask
Thread or Runnable 的方式,run()结束后没有返回结果,当run()结束后有返回结果的,使用future;
适用于耗时的计算任务,主线程可以完成自己的任务后,去获取线程的结果
并且,futureTask即便调用了多次,也只会执行一次run方法(任务只执行一次),(尤其在高并发的情况下,确保只执行一次)
2,使用基本方式
Callable callable = new Callable();//要执行的任务
FutureTask<返回类型> futureTask = new FutureTask(callable)//把任务托管给futureTask;
Thread thread = new Thread(futureTask);futureTask托管给thread,创建线程
thread.start();//启动线程
Object result = futuretask.get();//获取结果,可以设定超时时间
future.cancel(true);//执行过程中,可以cancel
3、FutureTask源码结构