二月份回家过年了,家里没网,所以博客也停了一段时间,上班已经一周了,总的来说还是比较忙吧!周末还是把没总结完的知识点总结一下,方便日后翻阅!
Callable与Future
Runnable封装一个异步运行的任务,可以把它想象成一个没有参数和返回值的异步方法。Callable与Runnable类似,但是有返回值。Callable接口是一个参数化的类型,只有一个方法call。
public interface Callable<V>{
V call() throws Exception;
}
类型参数是返回值的类型。
Future保存异步计算的结果。可以启动一个计算,将Future对象交给某个线程,然后忘得它。Future对象的所有者在结果计算好之后就可以捕获它。
Future接口有以下方法:
public interface Future<V>{
v get() throws ...;
v get(long timeout, TimeUnit unit) throws ...;
void calcel(boolean mayInterrupt);
boolean isCancelled();
boolean isDone();
}
第一个get方法的调用被阻塞,直到计算完成。如果在计算完成之前,第二个方法的调用超时,抛出一个TimeoutException异常。如果运行该计算的线程被中断,两个方法都将抛出InterruptedException。如果计算完成,那个get方法立即返回。
如果计算还在进行,isDone方法返回false;如果完成了,则返回true。
可以用cancel方法取消该计算。如果计算还没有开始,它被取消且不再开始。如果计算处于运行之中,那么如果mayInterrupt参数为true,它就被中断。