Future是一个接口,围绕着Future产生了线程的调用方式。
为什么要用Future?
通过调用Future的线程,可以获取线程执行的结果;而Thread,Runnable没有返回值。
方法详解
1.Future的方法说明:
cancel():取消任务,取消成功返回true,失败返回false。
isCancelled():任务是否被取消成功,正常取消成功返回true。
isDone():任务是否已经完成,若任务完成,则返回true。
get():获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回。
get(long timeout, TimeUnit unit):用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null。
2.Callable说明:定义Future的返回值
V call():这是泛型接口,返回值的类型就是传递进来的V类型。
3.FutureTask说明:是Future接口的唯一一个实现类。
提供了构造方法:FutureTask(Callable<V> callable)。
如何使用Future?
- 定义Callable()。
- 定义FutureTask()。
- 运行线程,new Thread(FutureTask futureTask).start()。
用途:
- 使用线程的返回值,可以使用Future。
- 并行执行线程,最后并进行统计。
- 线程阻塞,只有isDone()后,才会执行下一个任务。