JAVA异步编程
在Java中,常见的是通过Future来实现异步编程.
Future是什么
Future存在于JUC包(JUC:JAVA的并发包)中,是一个异步返回的接口,Future代表的是异步计算出来的结果.
Future 里有什么
Future中有5个常用的方法,我们可以看看Future里的源码:
灵魂发问: 这五个方法都有什么用
Future内部的方法
这五种方法一一介绍一下:
- V get(); 这个方法是等待计算完成,然后返回一个计算完成后的结果. 如果当前的任务没有计算完成,会阻塞调用线程直到计算完成. 这个方法会抛出三种异常,如图所示:
ExecutionException:任务计算过程中抛出异常的话,就会抛出这个异常. CancellationException: 如果在等待结果的过程中,其他线程取消了该任务,则抛出这个异常. 如果需要中断这个线程没有中断:会抛出InterruptedException
- V get(long timeout,TimeUnit unit)throws InterruptedException,ExecutionException,TimeoutException;
相比get()方法多了超时时间,当线程调用了该方法后,在任务结果没 有计算出来前调用线程不会一直被阻塞,而是会在等待timeout个unit 单位的时间后抛出TimeoutException异常后返回。添加超时时间避免 了调用线程死等的情况,让调用线程可以及时释放。
这个方法多了个超时时间的参数,当调用的线程没有在规定时间内返回结果,就会报错.
-
boolean isDone(): 如果计算任务已经完成则返回true,否则 返回false。、在这里任务完成的意思是指任务正常的计算出来结果并返回,或者是计算过程抛出 异常而完成了或者任务被取消了
-
boolean cancel(boolean mayInterruptIfRunning): 这个方法用来尝试取消任务的执行,乳沟任务完成了或者已经被取消了,在调用这个方法去取消会失败,
-
boolean isCancelled(): 这个方法表示如果任务在执行完成之前就被取消了,则该方法返回true,告知调用者任务已经被取消,否则返回false。