内容目录
java
4.1 Callable 接口
2、Callable 实现的线程可以返回线程执行的结果,Runnable 不能返回执行结果;
3、Callable 的 run 方法会抛出一个编译时异常,Runnable 的 run 方法没有任何异常;
4、可以使用工厂类 Executors 来把一个 Runnable 包装成一个 Callable;
4.2 Future 接口
1、一个 Future 代表一个异步执行的结果;
2、它提供了一些方法用来检查异步执行是不是已经完成了,没有完成则等待异步执行完成并取回异步执行的结果;
3、异步执行结果,只能通过 get()方法获取,get()方法是阻塞的,如果异步执行没有执行结束,则阻塞直到执行结束拿到结果;
4、它提供了一个 cancal()方法用于取消异步执行,但是一旦任务已经执行完毕,则不能取消;
5、如果你不想要执行的结果,也可以把底层的任务声明为返回 null;
cancel()
:如果等太久,你可以直接取消这个任务;
isCancelled()
:任务是不是已经取消了;
isDone()
:任务是不是已经完成了;
get()
:有 2 个 get()方法,不带参数的表示无穷等待,带参数的表示只等待给定时间;
4.3 FutureTask 类
1、FutureTask 代表一个可以取消的异步执行/计算,并且能拿到异步执行的结果;
2、FutureTask 是一个类,它实现了 Runnable 接口和 Future 接口,对这两个接口的方法进行了基本的实现,比如开始和取消一个执行,查看执行是不是已经完成,取回执行后的结果等等;
3、结果的取回,只能在执行完成后才能取回,get() 方法会阻塞,直到执行完成;
4、一旦执行完成,则不能重新开始执行,也不能取消;
5、FutureTask 可以用来包装 Runnable 或者 Callable;
6、FutureTask 可以提交到 Executor 里面去执行;